位逻辑运算符

对二进制提供运算提供支持是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(屏蔽),

例如 a11011010

     b: 11110000

           1101000

相当于把a的低4位屏蔽,而高4位不变

将特定的二进制位与1异或可以使这些二进制位的值按位取反

:             11011010

           00001111(^)

           11010101

凡是与1异或的位都便反了,而与0异或的位保持原来的值

使用按位逻辑的需要注意一点

表示7的逻辑反的方法是~0x7,而最好不要用0xfff8,因为~0x716位机上的表示是11111111111110000xfff8,但在32位机上的表示是0xfffffff8

优先级

按位与、或、异或和移位运算符的优先级均低于算术运算符,但是要高于赋值运算符,按位取反的优先级最高(在运算符中仅低于圆括号)

此外,按位与>按位异或>按位或

逗号运算符(双目运算符,字左至右)

z=x*(y=3)z=(y=3,x*y)是等价的

原文地址:https://www.cnblogs.com/emptyCoder/p/5152089.html