一、前提
了解 |(或)、&(与)、<<(左移)、>>(右移)、~(取反)这个几个运算符的用法和概念。
|(或)运算符:有“1”为“1”
&(与)运算符:有“0”为“0”,全“1”为“1”
<<(左移)运算符:左移就是把一个数的所有位都向左移动若干位
>>(右移)运算符:右移就是把一个数的所有位都向右移动若干位
~(取反)运算符:通俗点讲就是“1”变成“0”,“0”变成“1”
二、某一位置"1"
例子:char a=1, 他的二进制数就是0000 0010 把这个数的第二位置“1”,这个第二位是从右往左数且最右边为第零位,即0000 0010红色位置“1”
代码表示: a |= 1<<2;
解析:1<<2 二进制表示 0000 0100 ,左移一位后的二进制数0000 0100
这个0000 0100再和0000 0010相或;即0000 0100 | 0000 0010 = 0000 0110
结果0000 0110这样就完成置“1”.
三、某一位清"0"
此例以上述a=6为例,把第二位清“0”,二进制表示 0000 0110
代码表示: a&= ~(1<<2);
解析: 1<<2二进制表示 0000 0100 ,左移一位后的二进制数0000 0100
0000 0100 取反得到 1111 1011
1111 1011再和0000 0110相与;即0000 0110&1111 1011 = 0000 0010
结果0000 0010这样就完成清“0”.