1、2018/9/3,许创制作,1,第八章 位运算,位运算概述本章讲述的是二进制位的运算,即是直接对存放二进制数据的字节进行操作。这些本属于低级语言的功能在高级语言C中也能够实现。 C语言位操作的运算符见下表,2018/9/3,许创制作,2,位运算符 含义 按位取反 右移& 按位与| 按位或 按位异或,2018/9/3,许创制作,3,位运算赋值操作 含义&= 位与赋值|= 位或赋值= 位异或赋值= 右移赋值= 左移赋值,2018/9/3,许创制作,4,位运算符使用方法 按位与运算符1 ,2018/9/3,许创制作,5,例8.2 测试某数b二进制位第三位是否为1 可将一个十进制数8与b进行 ,201
2、8/9/3,许创制作,6,例8.3 对例8.2 改用十六进制数输入输出如: a = 0 0 0 0 1 0 0 0 (0816)b = 0 0 0 1 1 0 0 0 (1816) 结果: a ,2018/9/3,许创制作,7,按位或运算符1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 如: a =0 0 0 1 0 0 0 0 (1016) b =0 0 1 1 0 1 0 0 (3416) 结果: a | b =0 0 1 1 0 1 0 0 (3416) 例8.4 scanf(“%x”, ,2018/9/3,许创制作,8,按位异或运算符 11= 0 10=
3、 1 01= 1 00= 0 例8.5 使b的第4位翻转 如: a =0 0 0 1 0 0 0 0 (1016) b =0 0 1 1 0 1 0 1 (3516) 结果: a b =0 0 1 0 0 1 0 1 (2516) scanf(“%x”, ,2018/9/3,许创制作,9,按位取反运算符 如: a = 0 0 0 0 0 0 1 1 (0316) 结果: a = 1 1 1 1 1 1 0 0 (fc16) 例8.6 按位取反 scanf(“%x”, ,2018/9/3,许创制作,10,左移运算符 如: a =1 0 0 0 0 1 0 1 (8516) 结果: a2 =0 0
4、 0 1 0 1 0 0(1416) 例8.7 左移两位scanf(“%x”, ,2018/9/3,许创制作,11,右移运算符 如: a =1 0 0 0 0 1 0 1 (8516) 结果: a2 =0 0 1 0 0 0 0 1 (2116) 例8.8 右移两位 scanf(“%x”, ,2018/9/3,许创制作,12,位运算概述 例8.9 将十六进制整数转换为二进制整数,算法思想:从高位到低位逐位测试每一位是0或是1。可顺次设置屏蔽字分别为1000 0000 0000 0000、0100 0000 0000 0000、0000 0000 0000 0001,与该数进行&运算,从而保留所需的一个位的状态(其余各位为0)。若结果非零则输出1,否则输出0。,2018/9/3,许创制作,13,算法描述:1)置变量mask初值为0x8000;2)输入十六进制整数给变量num;3)循环16次做:3.1)若(mask ,