📅  最后修改于: 2023-12-03 14:59:36.352000             🧑  作者: Mango
在 C/C++ 编程中,经常会用到按位运算符。按位运算符是用来操作二进制位的,这些运算符将其操作数视为二进制的整数并对其进行操作。在本篇文章中,我会详细介绍 C/C++ 中的按位运算符如何使用。
C/C++ 中的按位运算符包括以下六种类型:
接下来,我们将逐一介绍这些运算符。
按位与运算符(&)对两个操作数中对应的位执行逻辑与操作,如果对应的两个位都为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++ 中的按位运算符的详细介绍。按位运算符是用来操作二进制位的,对于需要对二进制进行操作的场景非常实用。在实际编程过程中,需要仔细阅读并仔细运用每种按位运算符。