位运算
位运算(\(Bitwise Operations\))是一种直接对二进制位进行操作的运算方式。在 \(C++\) 中,位运算符包括按位与(&
)、按位或(|
)、按位异或(^
)、按位取反(~
)、左移(<<
)和右移(>>
)。这些运算符在处理二进制数据时非常有用,尤其是在需要高效处理数据或进行底层操作时。
1. 左移运算符(<<
)
逻辑:左移运算符将一个数的二进制表示向左移动指定的位数,右侧用零填充。
语法:
a << n
a
是要进行左移的数。n
是要左移的位数。
示例:
int a = 5; // 二进制表示为 0000 0101
int b = a << 2; // 左移2位,结果为 0001 0100,即十进制的 20
\(a << n\) 即为 \(a * (2^n)\)。
解释:
5
的二进制表示是0000 0101
。- 左移2位后,变为
0001 0100
,即十进制的20
。
2. 右移运算符(>>
)
逻辑:右移运算符将一个数的二进制表示向右移动指定的位数,左侧用符号位填充(对于有符号数)或用零填充(对于无符号数)。
语法:
a >> n
a
是要进行右移的数。n
是要右移的位数。
示例:
int a = 20; // 二进制表示为 0001 0100
int b = a >> 2; // 右移2位,结果为 0000 0101,即十进制的 5
\(a >> n\) 即为 \(a / (2^n)\)。
解释:
20
的二进制表示是0001 0100
。- 右移2位后,变为
0000 0101
,即十进制的5
。
3. 其他位运算符
-
按位与(
&
):对两个数的每一位进行与操作。int a = 5; // 二进制表示为 0000 0101 int b = 3; // 二进制表示为 0000 0011 int c = a & b; // 结果为 0000 0001,即十进制的 1
-
按位或(
|
):对两个数的每一位进行或操作。int a = 5; // 二进制表示为 0000 0101 int b = 3; // 二进制表示为 0000 0011 int c = a | b; // 结果为 0000 0111,即十进制的 7
-
按位异或(
^
):对两个数的每一位进行异或操作。int a = 5; // 二进制表示为 0000 0101 int b = 3; // 二进制表示为 0000 0011 int c = a ^ b; // 结果为 0000 0110,即十进制的 6
-
按位取反(
~
):对一个数的每一位进行取反操作。int a = 5; // 二进制表示为 0000 0101 int b = ~a; // 结果为 1111 1010,即十进制的 -6(在补码表示中)
应用场景
位运算在以下场景中非常有用:
- 位掩码:通过位运算来设置、清除或检查特定位。
- 高效计算:通过位运算可以实现某些高效的操作,如快速乘以或除以2的幂。
- 数据压缩:通过位运算可以实现数据的压缩和解压缩。
- 加密算法:某些加密算法中会使用到位运算。