所谓位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。
C语言提供了六种位运算符:
运算符 | & | | | ^ | ~ | << | >> | 说明 | 按位与 | 按位或 | 按位异或 | 取反 | 左移 | 右移 |
取反运算(~)
取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。。
例如,~9可以转换为如下的运算:~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110 (-10 在内存中的存储) 所以~9的结果为 -10。
例如,~-9可以转换为如下的运算:~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
-----------------------------------------------------------------------------------
0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1000 (8 在内存中的存储) 所以~-9的结果为 8。
【实例】对上面的分析进行校验。- #include <stdio.h>
- int main(){
- printf("%d, %d\n", ~9, ~-9 );
- return 0;
- }
运行结果:
-10, 8
|