3)保留一个数的某些位(其他位 置0): 如,若保留a的从右数第3,4,5,7,8位 a=a&(0000 0000 1101 1100)2 =a&(0334)8
§12.1.2 按位或运算符(| ) (注意:|与||的区别)
运算规则: 0|0=0 , 0|1=1 , 1|0=1, 1|1=1
如:求060|017=? 00110000
︾ 二者可以统一如下表示:
a=a&~1
15个1 因为当系统为16位时,~1=11……10
31个1
§12.1.5 "左移"运算符(<<)
a<<n
功能: 将a的二进制数位依次左移n位,右边补零 如: a=15, a=a<<1; 15=(00001111)2 15<<1=(00011110)2=036=30 类似的: a=15, a=a<<2; 15<<2=(00111100)2=074=60 但是:a=128, a=a<<1; 128=(10000000)2 128<<1=(00000000)2=0 (出现溢出!!!) 很容易看出,当无溢出时:
如,一个取值为0,1的标志变量只需要1个数位; 存放黑白两色也只需要1个数位. 即使存放8种颜色也仅只需要3个数位.
3 利用按位运算可以非常方便的从一个字节中读取和写入一个或 几个数位上的数据.
§12.1 位运算符和位运算 (位:指的是二进制的位!!!)
C语言提供的六种位运算:
运算符 & |
含义 按位与 按位或
§12.1.3 "异或"运算符(^)
运算规则:
00=0, 01=1, 10=1, 11=0 即,相同取0 ,相异取1