16 运算符之位运算符

在上篇中,我们讨论了逻辑运算符,包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。这些运算符通常用于条件判断,而在本篇中,我们将深入探索 C++ 的位运算符(bitwise operators)。位运算符对二进制位进行操作,非常适合需要直接操作数据底层的场景。
位运算符的种类
C++ 提供了以下几种常用的位运算符:
- 按位与(
&) - 按位或(
|) - 按位异或(
^) - 按位取反(
~) - 左移(
<<) - 右移(
>>)
接下来,我们将逐个介绍这些运算符及其使用案例。
1. 按位与(&)
按位与运算符会对对应的每一位进行与操作,只有当两个操作数的相应位都为1时,结果才为1。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 12; // 二进制:1100
int b = 5; // 二进制:0101
int result = a & b; // 结果:0100,即 4
cout << "按位与: " << result << endl;
return 0;
}
2. 按位或(|)
按位或运算符对两个操作数的相应位进行或操作,只要任一位为1,结果就为1。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 12; // 二进制:1100
int b = 5; // 二进制:0101
int result = a | b; // 结果:1101,即 13
cout << "按位或: " << result << endl;
return 0;
}
3. 按位异或(^)
按位异或运算符会对两个操作数的相应位进行异或操作,当且仅当一位为1而另一位为0时,结果为1。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 12; // 二进制:1100
int b = 5; // 二进制:0101
int result = a ^ b; // 结果:1001,即 9
cout << "按位异或: " << result << endl;
return 0;
}
4. 按位取反(~)
按位取反运算符会对操作数的每一位进行取反,0 变成 1,1 变成 0。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 12; // 二进制:1100
int result = ~a; // 结果:...11110011 (补码表示)
cout << "按位取反: " << result << endl; // 输出:-13
return 0;
}
5. 左移(<<)
左移运算符将操作数的二进制位向左移动指定的位数,右侧补零。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 3; // 二进制:0011
int result = a << 2; // 结果:1100,即 12
cout << "左移: " << result << endl;
return 0;
}
6. 右移(>>)
右移运算符将操作数的二进制位向右移动指定的位数,左侧根据操作数的符号位进行填充。
示例:
#include <iostream>
using namespace std;
int main() {
int a = 12; // 二进制:1100
int result = a >> 2; // 结果:0011,即 3
cout << "右移: " << result << endl;
return 0;
}
小结
位运算符是 C++ 提供的非常强大的工具。它们被广泛应用于底层编程,例如操作硬件、编码和解码数据等。了解这些运算符的使用,可以帮助你更深入地理解计算机的工作原理。
在下篇中,我们将继续探讨控制结构中的 if 条件语句,这将为你提供更强大的编程思维和能力。希望这篇关于位运算符的教程能为你的 C++ 学习带来帮助!
