📜  C C++中的按位运算符(1)

📅  最后修改于: 2023-12-03 14:59:36.352000             🧑  作者: Mango

C/C++中的按位运算符

在 C/C++ 编程中,经常会用到按位运算符。按位运算符是用来操作二进制位的,这些运算符将其操作数视为二进制的整数并对其进行操作。在本篇文章中,我会详细介绍 C/C++ 中的按位运算符如何使用。

按位运算符的类型

C/C++ 中的按位运算符包括以下六种类型:

  1. 按位与(&)
  2. 按位或(|)
  3. 按位异或(^)
  4. 取反(~)
  5. 左移(<<)
  6. 右移(>>)

接下来,我们将逐一介绍这些运算符。

按位与(&)

按位与运算符(&)对两个操作数中对应的位执行逻辑与操作,如果对应的两个位都为1,则结果为1,否则为0。

例如:

unsigned int a = 0b10100101;
unsigned int b = 0b11001100;
unsigned int c = a & b;  // c 的值为 0b10000100

在这个例子中,a 和 b 分别是二进制数 0b10100101 和 0b11001100。按位与运算符(&)执行逻辑与,并将结果赋给变量 c。结果是 0b10000100。

按位或(|)

按位或运算符(|)对两个操作数中对应的位执行逻辑或操作,如果对应的两个位有一个为1,则结果为1,否则为0。

例如:

unsigned int a = 0b10100101;
unsigned int b = 0b11001100;
unsigned int c = a | b;  // c 的值为 0b11101101

在这个例子中,a 和 b 分别是二进制数 0b10100101 和 0b11001100。按位或运算符(|)执行逻辑或,并将结果赋给变量 c。结果是 0b11101101。

按位异或(^)

按位异或运算符(^)对两个操作数中对应的位执行逻辑异或操作,如果对应的两个位不同,则结果为1,否则为0。

例如:

unsigned int a = 0b10100101;
unsigned int b = 0b11001100;
unsigned int c = a ^ b;  // c 的值为 0b01101001

在这个例子中,a 和 b 分别是二进制数 0b10100101 和 0b11001100。按位异或运算符(^)执行逻辑异或,并将结果赋给变量 c。结果是 0b01101001。

取反(~)

按位取反运算符(~)对操作数中的每个二进制位执行逻辑取反操作,即将每个1替换为0,将每个0替换为1。

例如:

unsigned int a = 0b10100101;
unsigned int b = ~a;  // b 的值为 0b01011010

在这个例子中,a 是二进制数 0b10100101。按位取反运算符(~)执行逻辑取反,并将结果赋给变量 b。结果是 0b01011010。

左移(<<)

左移运算符(<<)将一个操作数的二进制位向左移动指定的位数。左移时,右侧空出的位用0填充。

例如:

unsigned int a = 0b10100101;
unsigned int b = a << 2;  // b 的值为 0b10010100

在这个例子中,a 是二进制数 0b10100101。左移运算符(<<)将 a 向左移动2位,并将结果赋给变量 b。结果是 0b10010100。

右移(>>)

右移运算符(>>)将一个操作数的二进制位向右移动指定的位数。右移时,左侧空出的位用符号位填充(即,如果操作数的符号位为1,则左侧用1填充,否则用0填充)。

例如:

int a = -37;  // a 的二进制表示为 0b11111111 11111111 11111111 11011011
int b = a >> 2;  // b 的值为 -10,二进制表示为 0b11111111 11111111 11111111 11110101

在这个例子中,a 的值为 -37,在补码表示法下的二进制表示为 0b11111111 11111111 11111111 11011011。右移运算符(>>)将 a 向右移动2位,并将结果赋给变量 b。右移时,左侧空出的位用符号位1填充,因为 a 是负数。结果是 -10,在补码表示法下的二进制表示为 0b11111111 11111111 11111111 11110101。

总结

以上就是 C/C++ 中的按位运算符的详细介绍。按位运算符是用来操作二进制位的,对于需要对二进制进行操作的场景非常实用。在实际编程过程中,需要仔细阅读并仔细运用每种按位运算符。