在 CSP-J 的备考冲刺阶段,对于 C++语法中的位运算技巧的掌握至关重要。今天我们就来详细总结一下按位与(&)、或(|)、异或(^)、左移(«)、右移(»)的常见用法,包括状态压缩和快速乘除,并附上典型代码示例,帮助大家更好地理解和应用。
一、按位与(&)
-
作用
- 可以用来对两个数的二进制位进行与操作。
- 常用于判断某个数的特定位是否为 1。
-
状态压缩中的应用
- 例如,要判断一个整数中某几位是否同时为 1,可以通过与特定的二进制数进行与运算来实现。
-
典型代码示例
int num = 12; // 二进制为 1100
int mask = 3; // 二进制为 0011
if (num & mask) {
cout << "最低两位为 1" << endl;
}
二、按位或(|)
-
作用
- 对两个数的二进制位进行或操作。
- 可以用来将某些位置 1。
-
状态压缩中的应用
- 用于设置整数的某些特定位为 1。
-
典型代码示例
int num = 5; // 二进制为 0101
int mask = 6; // 二进制为 0110
num = num | mask; // 结果为 7,二进制为 0111
三、按位异或(^)
-
作用
- 对两个数的二进制位进行异或操作。
- 相同为 0,不同为 1。
-
应用
- 可以用于交换两个变量的值而不需要额外的临时变量。
- 找出数组中只出现一次的数字(其他数字都出现两次)。
-
典型代码示例(交换变量值)
int a = 3, b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
cout << "a = "<< a << ", b = "<< b << endl; // 输出 a = 5, b = 3
四、左移(<<)
-
作用
- 将一个数的二进制位向左移动指定的位数。
-
快速乘法应用
- 左移 n 位相当于乘以 2 的 n 次方。
-
典型代码示例
int num = 4; // 二进制为 100
num = num << 1; // 结果为 8,二进制为 1000
五、右移(>>)
-
作用
- 将一个数的二进制位向右移动指定的位数。
-
快速除法应用
- 右移 n 位相当于除以 2 的 n 次方(对于正数)。
-
典型代码示例
int num = 16; // 二进制为 10000
num = num >> 2; // 结果为 4,二进制为 100
总之,在 CSP-J 的备考中,熟练掌握位运算的各种技巧能够提高解题效率和代码质量。希望大家通过以上的总结和示例,能够在考试中灵活运用这些知识,取得好成绩!
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!