在本教程中,您将通过示例了解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