a & b = a,b各二进制补码,各位求与运算,各位均为1,结果为1,否则为0。
a | b = a,b 各二进制补码,各位求或运算,各位有一个为1,结果为1,否则为0。
0001 = 1,
0010 = 2
0100 = 4
1000 = 8
4个状态位,与后,值不改变的话,该状态位为真。为0的话,表示该状态位为假。
int a=1,b=2,c=4,d=8;
int test = 10;//1010
printf("%d,%d,%d,%d",a&test,b&test,c&test,d&test);
out:0,2,0,8//第一位,跟第三位为假。
//如果改变状态位为真,该状态位与test值取或值
printf("%d",a|test);
<pre name="code" class="cpp"> out:11//改变第一位值为真
//再来看与值
test = 11;//1011
<pre name="code" class="cpp"> printf("%d,%d,%d,%d",a&test,b&test,c&test,d&test);
cout:1,2,0,8//只剩第三位值为假