对二进制提供运算提供支持是C语言区别于其他高级语言的重要特征
位运算有6个运算符:按位取反~,左移<<,右移>>,按位与&,按位或|和按位异或^,仅按位取反是单目运算符(结合方向:自右至左),其他都是双目运算符(自左至右)
由于操作数在实现位操作时按二进制进行运算,所以它们不能是floatdouble型,一般是无符号型整数,也可以是字符型,因为字符型可以看作是8位二进制表示的整数,操作数可以是变量、常量、表达式
按位异或:0^0 =0,0^1=1,1^0=1,1^1=0,
例:char x; x=10&8;printf(“%d “,x);//8
00001010
00001000(按位与&)
00001000
按位与运算符用于把特定的二进制位清0零(屏蔽),
例如 a:11011010
b: 11110000
1101000
相当于把a的低4位屏蔽,而高4位不变
将特定的二进制位与1异或可以使这些二进制位的值按位取反
例: 11011010
00001111(^)
11010101
凡是与1异或的位都便反了,而与0异或的位保持原来的值
使用按位逻辑的需要注意一点
表示7的逻辑反的方法是~0x7,而最好不要用0xfff8,因为~0x7在16位机上的表示是1111111111111000即0xfff8,但在32位机上的表示是0xfffffff8
优先级
按位与、或、异或和移位运算符的优先级均低于算术运算符,但是要高于赋值运算符,按位取反的优先级最高(在运算符中仅低于圆括号)
此外,按位与>按位异或>按位或
逗号运算符(双目运算符,字左至右)
z=x*(y=3)与z=(y=3,x*y)是等价的