我们如果想修改二进制数中的某一位,将它修改为0或1,使用移位,取反这两个操作符,可以很方便的修改
int a = 11 //二进制为 00000000 00000000 00000000 00001011
1.想把某一位的0修改为1:
/*1的32为2进制 00000000 00000000 00000000 00000001
00000000 00000000 00000000 00001011 11的二进制
00000000 00000000 00000000 00000001 1的二进制
由于1的32进制只有一个1,所以通过左移将1移到想要修改的位,
然后和原数进行按位或,就能把0修改为1
加入我想把11的倒数第三位0修改为1*/
a = a|(1<<2)
/*00000000 00000000 00000000 00001011
00000000 00000000 00000000 00000100 两者或运算
00000000 00000000 00000000 00001111 应该的结果,15*/
printf("%d\n",a);打印结果也是15
2.想把某一位的1修改为0:
/*我想把15的第三位置为0
00000000 00000000 00000000 00001111 15的二进制
00000000 00000000 00000000 00000001 1的二进制位
00000000 00000000 00000000 00000100 左移两位
11111111 11111111 11111111 11111011 按位取反
然后再和15的二进制进行按位与,即可将倒数第三位的1置为0*/
a=a&(~(1<<2));