3.8 位逻辑运算符
~ << >> & | ^ 按位取反 左移 右移 按位与 按位或 按位异或 操作数在实现位操作时按二进制进行运算, 7一般应为无符号型整数。
按位与&
按位与的运算规则是: 0&0=0 0&1=0 1&0=0 1&1=1 例如:char w1,w2,w3; w1=10; w2=8; w3= w1&w2 ; w3的内容可以通过下式运算:
00001010
00001000 (按位与&)
00001000 (结果)
&运算经常用于把特定位清零(屏蔽)。
例如,
a的值为11011010,b的值为11110000,
a&b
11011010
& 11110000
11010000
相当于把a的低4位屏蔽,高4位不变。
按位或 |
按位或的运算规则是: 0 | 0=0 0 | 1=1 1 | 0=1 1 | 1=1 例如: char w1,w2,w3; w1=10; w2=8; w3= w1|w2 ; w3的内容可以通过下式运算: 00001010 00001000 (按位或 |) 00001010 (结果)
六个关系运算符中的“!=”和“==”的优先 级小于其余四个运算符。
关系运算符的优先级小于算术运算符, 大于赋值运算符。关系运算符的结合性均为自 左至右。
当多种运算符在一个表达式中同时使用时, 要注意运算符的优先级,防止记错运算符优先 级的最好方法是加圆括号。
例3.4 注意,不赞成按本例这样编写程序。 #include "stdio.h" void main() { int x,y,z,i,j; x=4,y=3,z=2; i=y>z; j=x>y>z; printf("%2d,%2d,",i,j); printf("%2d,",z>y==3); printf("%2d,",y+z<x); printf("%2d\n", y+2>=z+1); } 运行结果为: 1,0,0,0,1