什么是位运算符
位运算符是指操作数中的每一个比特位(0或1)对应地进入运算。在C语言中,提供了6个二进制操作符用来对位进行操作,分别是“&”(按位与)、“|”(按位或)、“^”(按位异或)、“~”(按位取反)、“<<”(左移)、“>>”(右移)。
按位与运算符 &
计算方式
按位与运算符“&”将两个操作数的每个位进行逻辑与操作,即两个操作数的对应的位都为1,结果为1,否则为0。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = 7; //十进制数7的二进制表示为0000 0111
int c = a & b; //c的值为0000 0110,即十进制数6
可以看到,数值a和数值b分别与运算后,得到数值c。
按位或运算符 |
计算方式
按位或运算符“|”将两个操作数的每个位进行逻辑或操作,即两个操作数的对应的位都为0,结果为0,否则为1。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = 7; //十进制数7的二进制表示为0000 0111
int c = a | b; //c的值为0000 1111,即十进制数15
可以看到,数值a和数值b分别或运算后,得到数值c。
按位异或运算符 ^
计算方式
按位异或运算符“^”将两个操作数的每个位进行逻辑异或操作,即两个操作数的对应的位相同,则结果为0,否则为1。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = 7; //十进制数7的二进制表示为0000 0111
int c = a ^ b; //c的值为0000 1001,即十进制数9
可以看到,数值a和数值b分别异或运算后,得到数值c。
按位取反运算符 ~
计算方式
按位取反运算符“~”将操作数的每个位进行逻辑取反操作,即对于操作数的每个位,如果为1,结果为0,如果为0,结果为1。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = ~a; //b的值为1111 0001,即十进制数-15
可以看到,数值a逐位取反后,得到数值b。
需要注意的是,由于C语言中负数采用二进制补码表示,故~a并不是二进制补码的取反,而是二进制原码的取反。因此, ~a的结果是-15而不是-14。
左移运算符 <<
计算方式
左移运算符“<<”是将一个数向左移动n位,由于在二进制数中移位相当于乘以2的移位次幂,所以左移n位等价于该数乘以2^n。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = a << 2; //b的值为0011 1000,即十进制数56
可以看到,数值a左移2位后,得到数值b。
右移运算符 >>
计算方式
右移运算符“>>”是将一个数向右移动n位,由于在二进制数中移位相当于除以2的移位次幂,所以右移n位等价于该数除以2^n。
示例代码
int a = 14; //十进制数14的二进制表示为0000 1110
int b = a >> 2; //b的值为0000 0011,即十进制数3
可以看到,数值a右移2位后,得到数值b。
总结
在C语言中,位运算符广泛应用于计算机底层的操作。掌握位运算符的运算方式和规律,可以进行高效的二进制运算,从而提高程序的效率。在实际应用中,需要注意数值的二进制表示形式,以及使用位运算符的规则和限制。