C语言中位运算符有哪些

什么是位运算符

位运算符是指操作数中的每一个比特位(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语言中,位运算符广泛应用于计算机底层的操作。掌握位运算符的运算方式和规律,可以进行高效的二进制运算,从而提高程序的效率。在实际应用中,需要注意数值的二进制表示形式,以及使用位运算符的规则和限制。

后端开发标签