十进制13-->二进制01101
现要求二进制序列的第5位修改为1,再改成0
复习:逻辑运算的布尔运算符
非(NOT)(C语言:~)
x==0,NOT x-->1;x==1,NOT x-->0
与(AND)(C语言:&)
x=0或1,x AND 0-->0,0 AND x-->0
或(OR)(C语言:|)
x=0或1,x OR 1-->1,1 OR x-->1
异或(XOR)(C语言:^)
x==0或1,x XOR 1-->NOT x和1 XOR x--> NOT x
只要让第5位改为1,其他序列保持不变,应该用OR
0 OR 1==1(从0变1),1 OR 0==1(不变),0 OR 0==0(不变)
最简单的方法是让1左移4位(补0)
int n=13;
n |=(1<<4);
printf("%d",n);
改回0:用AND
1 AND 0==0(从1变0)1 AND 1==1(不变)0 AND 1==0(不变)
该数(111111...01111)得到的方法:
1向左移动4位-->取反
~(1<<4)
所以写成
n&=(~(1<<4))
往期推荐: