在C语言中,移位运算符<<
和>>
表示二进制数左移或右移,我们可以利用它们很轻松地对变量中单个位进行置一和清零。
我们可以规定变量二进制数最右边一位是第0位,定义bit_number是0,对应地,从最右边一位往左数第n位,对应的bit_number是n-1。
上图是举个例子,
置一
我们如果需要把bit_number对应的数变为1,可以这样写:
value |= 1 << bit_number;
等价于:
value = value | ( 1 << bit_number );
利用1 << bit_number将1移动到bit_number对应的位上。
比如1<<2;我们得到:
再和value中的值相或,value中除了bit_number对应的位上的数变为1,其他可以保持不变,原理是或的属性:
1|1=1
1|0=1
0|a=a (a=0或a=1)
清零
我们如果需要把bit_number对应的数变为0,可以这样写:
value &= ~ ( 1 << bit_number );
等价于:
value = value & ( ~ ( 1 << bit_number ) );
利用1 << bit_number将1移动到bit_number对应的位上,再取非,把位上的0变成1,1变成0。
比如~(1<<2);我们得到:
再和value中的值相与,value中除了bit_number对应的位上的数变为0,其他可以保持不变,原理是或的属性:
0&1=0
0&0=0
1&a=a (a=0或a=1)
摘录自:《C和指针》71