位运算是对整数在内存中的二进制位进行操作的方法,常用的位运算符包括:
按位与(&):
对应位都为1时结果为1,否则为0。例如,`5 & 3` 的结果是 `1`。
按位或(|):
对应位有一个为1时结果为1,否则为0。例如,`5 | 3` 的结果是 `7`。
按位异或(^):
对应位不同时结果为1,相同则为0。例如,`5 ^ 3` 的结果是 `6`。
按位取反(~):
将所有的0变为1,所有的1变为0。例如,`~5` 的结果是 `-6`。
左移(<<):
将一个整数的二进制位向右移动指定的位数。例如,`20 << 2` 的结果是 `80`。
右移(>>):
将一个整数的二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用0填充,负数用1填充)。例如,`(-1) >> 3` 的结果是 `-1`。
示例代码
C++
```cpp
include
int main() {
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
// 按位与
int c = a & b; // 结果为 0001, 即十进制的 1
std::cout << "a & b = "<< c << std::endl;
// 按位或
int d = a | b; // 结果为 0111, 即十进制的 7
std::cout << "a | b = "<< d << std::endl;
// 按位异或
int e = a ^ b; // 结果为 0110, 即十进制的 6
std::cout << "a ^ b = "<< e << std::endl;
// 按位取反
int f = ~a; // 结果为 1010, 即十进制的 -6 (补码表示)
std::cout << "~a = "<< f << std::endl;
// 左移
int g = a << 1; // 结果为 10100, 即十进制的 20
std::cout << "a << 1 = "<< g << std::endl;
// 右移
int h = a >> 1; // 结果为 0010, 即十进制的 2
std::cout << "a >> 1 = "<< h << std::endl;
return 0;
}
```
Python
```python
a = 5 二进制: 0101
b = 3 二进制: 0011
按位与
c = a & b 结果为 1
print("a & b =", c)
按位或
d = a | b 结果为 7
print("a | b =", d)
按位异或
e = a ^ b 结果为 6
print("a ^ b =", e)
按位取反
f = ~a 结果为 -6 (补码表示)
print("~a =", f)
左移
g = a << 1 结果为 20
print("a << 1 =", g)
右移
h = a >> 1 结果为 2
print("a >> 1 =", h)
```
实用技巧
判断奇偶性:
使用 `x & 1` 可以快速判断整数 `x` 的奇偶性,若 `x & 1 == 0` 则 `x` 为偶数,否则为奇数。
交换两数:
利用异或操作,可以不使用额外空间交换两个变量的值: