编辑这个页面须要登录或更高权限!
在本教程中,您将通过示例了解C语言编程中所有6个按位运算符。
在算术逻辑单元(位于CPU内)中,诸如位加法,减法,乘法和除法之类的数学运算是在位级别完成的。 要在C编程中执行位级运算,请使用按位运算符。
运算符 | 运算符的含义 |
---|---|
&& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位补 |
<< | 左移位 |
>> | 右移位 |
如果两个操作数的对应位为1,则按位与的输出为1。如果一个操作数的任一位为0,则对应位的结果为0。
让我们假设两个整数12和25的按位与运算。
12 = 00001100(二进制) 25 = 00011001(二进制) 12和25的位运算 00001100 &00011001 ________ 00001000 = 8(十进制)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a&b); return 0; }
输出结果
Output = 8
如果两个操作数的至少一个对应位为1,则按位OR的输出为1。在C编程中,按|表示按位OR运算符。
12 = 00001100(二进制) 25 = 00011001(二进制) 12和25的按位或运算 00001100 | 00011001 ________ 00011101 = 29(十进制)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a|b); return 0; }
输出结果
Output = 29
如果两个操作数的对应位相反,则按位XOR运算符的结果为1。用^表示。
12 = 00001100(二进制) 25 = 00011001(二进制) 12和25的按位XOR运算 00001100 ^ 00011001 ________ 00010101 = 21(十进制)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a^b); return 0; }
输出结果
Output = 21
按位补运算符是一元运算符(仅在一个操作数上起作用)。 它将1更改为0,将0更改为1。用~表示。
35 = 00100011(二进制) 35的按位补码运算 〜00100011 ________ 11011100 = 220(十进制)
#include <stdio.h> int main() { printf("Output = %d\n",~35); printf("Output = %d\n",~-12); return 0; }
输出结果
Output = -36 Output = 11
C语言编程中有两个移位运算符:
右移运算符
左移运算符。
右移运算符将所有位向右移位指定数量的指定位。用>>表示。
212 = 11010100(二进制) 212 >> 2 = 00110101(二进制)[右移两位] 212 >> 7 = 00000001(二进制) 212 >> 8 = 00000000 212 >> 0 = 11010100(无移位)
左移运算符将所有位向左移特定数量的指定位。用<<表示。
212 = 11010100(二进制) 212 << 1 = 110101000(二进制)[左移一位] 212 << 0 = 11010100(移位0) 212 << 4 = 110101000000(二进制)= 3392(十进制)
#include <stdio.h> int main() { int num=212, i; for (i=0; i<=2; ++i) printf("右移 %d: %d\n", i, num>>i); printf("\n"); for (i=0; i<=2; ++i) printf("左移 %d: %d\n", i, num<<i); return 0; }
输出结果:
右移 0: 212 右移 1: 106 右移 2: 53 左移 0: 212 左移 1: 424 左移 2: 848