- 理解并掌握Python中的位运算符:异或(^)、与(&)、或(|)、反(~)、右移(>>)、无符号右移(>>>,注意Python中无原生的>>>运算符,但可通过其他方式模拟)。
- 能够通过实际案例演示位运算符的应用。
课程内容
一、引言
位运算符是对整数的二进制位进行操作的一种运算符。在Python中,这些运算符对于处理底层数据、优化算法等方面非常有用。
二、位运算符介绍
- 异或运算符(^)
- 定义:对两个数的二进制位进行异或操作,相同为0,不同为1。
- 案例:交换两个数的值(不使用临时变量)
python复制代码
a = 5 # 二进制 101
b = 3 # 二进制 011
a = a ^ b # a = 101 ^ 011 = 110 (6)
b = a ^ b # b = 110 ^ 011 = 101 (5),此时a的值已经变成了b的原始值
a = a ^ b # a = 101 ^ 110 = 011 (3),现在a和b的值已经交换
print(f"a={a}, b={b}") # 输出 a=3, b=5
- 与运算符(&)
- 定义:对两个数的二进制位进行与操作,相同为1,不同为0。
- 案例:检查一个数是否为偶数
python复制代码
num = 10 # 二进制 1010
if num & 1 == 0: # 检查最低位是否为0(偶数)
print("偶数")
else:
print("奇数")
- 或运算符(|)
- 定义:对两个数的二进制位进行或操作,相同或不同为1,全为0为0。
- 案例:设置特定二进制位
python复制代码
num = 5 # 二进制 101
num |= 4 # num = num | 4, 4的二进制是100,所以结果为101 | 100 = 101 (5,但实际上是设置了第3位)
print(num) # 输出 5,但注意这里并没有改变值,只是演示了操作
- 反运算符(~)
- 定义:对数的二进制位进行取反操作,0变1,1变0。注意Python中的结果是按补码形式返回的。
- 案例:计算一个数的补码
python复制代码
num = 6 # 二进制 0110
num_ = ~num # 实际上是计算了补码,结果为-7
print(num_) # 输出 -7
- 右移运算符(>>)
- 定义:将数的二进制位向右移动指定的位数,左侧用符号位填充(对于带符号整数)。
- 案例:快速除以2的幂
python复制代码
num = 8 # 二进制 1000
result = num >> 2 # 右移2位,相当于除以2的2次方
print(result) # 输出 2
- 无符号右移运算符(>>>)
- 注意:Python没有原生的无符号右移运算符(>>>)。但可以通过其他方式模拟,比如先将数转换为正数(如果它是负数),执行右移后,再根据情况调整结果。
- 模拟案例:模拟无符号右移
python复制代码
def unsigned_right_shift(num, bits):
# 转为正数处理
mask = (1 << bits) - 1
return (num & mask) >> bits
num = -8 # 二进制 1111 1000 (假设是8位,实际Python中int是动态长度的)
result = unsigned_right_shift(num, 3) # 尝试模拟无符号右移3位
print(result) # 输出结果将依赖于num的二进制表示和bits的值