16 运算符之位运算符

C++完整教程

在上篇中,我们讨论了逻辑运算符,包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。这些运算符通常用于条件判断,而在本篇中,我们将深入探索 C++ 的位运算符(bitwise operators)。位运算符对二进制位进行操作,非常适合需要直接操作数据底层的场景。

位运算符的种类

C++ 提供了以下几种常用的位运算符:

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

接下来,我们将逐个介绍这些运算符及其使用案例。

1. 按位与(&

按位与运算符会对对应的每一位进行与操作,只有当两个操作数的相应位都为1时,结果才为1

示例:

1
2
3
4
5
6
7
8
9
10
#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

示例:

1
2
3
4
5
6
7
8
9
10
#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

示例:

1
2
3
4
5
6
7
8
9
10
#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 变成 11 变成 0

示例:

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;

int main() {
int a = 12; // 二进制:1100
int result = ~a; // 结果:...11110011 (补码表示)
cout << "按位取反: " << result << endl; // 输出:-13
return 0;
}

5. 左移(<<

左移运算符将操作数的二进制位向左移动指定的位数,右侧补零。

示例:

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;

int main() {
int a = 3; // 二进制:0011
int result = a << 2; // 结果:1100,即 12
cout << "左移: " << result << endl;
return 0;
}

6. 右移(>>

右移运算符将操作数的二进制位向右移动指定的位数,左侧根据操作数的符号位进行填充。

示例:

1
2
3
4
5
6
7
8
9
#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++ 学习带来帮助!

16 运算符之位运算符

https://zglg.work/c-plusplus-zero/16/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

学习下节

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论