Python中的按位与运算符&用于对两个整数的二进制表示进行逐位逻辑与操作,其核心对齐规则决定了不同长度二进制数的运算逻辑,理解这个规则是正确使用按位与运算的基础。

按位与运算的基本逻辑
按位与运算的规则是:两个操作数对应二进制位都为1时,结果位为1,否则结果位为0。比如二进制数1010和1100进行按位与运算,从右往左每一位对比:
- 第0位:0和0,结果为0
- 第1位:1和0,结果为0
- 第2位:0和1,结果为0
- 第3位:1和1,结果为1
最终结果为1000,也就是十进制数8。
Python中按位与的对齐规则
当两个操作数的二进制位数不同时,Python会先将较短的二进制数左侧补0,直到两个二进制数的位数相同,再逐位进行按位与运算。这里需要注意,补0的方向是二进制数的高位(左侧),不会影响原有二进制位的位置关系。
示例1:位数不同的整数运算
我们拿十进制数3(二进制11)和十进制数5(二进制101)做按位与运算,先看对齐过程:
3的二进制是11,5的二进制是101,3的二进制位数更短,左侧补0后变为011,此时两个二进制数位数都是3位,逐位对比:
- 第0位:1和1,结果为1
- 第1位:1和0,结果为0
- 第2位:0和1,结果为0
最终结果为001,也就是十进制数1。我们可以用Python代码验证这个结果:
a = 3 # 二进制 11 b = 5 # 二进制 101 # 对齐后a为011,b为101,按位与结果为001即1 result = a & b print(result) # 输出1
示例2:包含0的运算
十进制数0的二进制是全0,和任何数做按位与运算时,对齐后所有位都是0和对应位比较,结果必然是0。比如0和7(二进制111)运算:
c = 0 # 二进制 0 d = 7 # 二进制 111 # 对齐后c为000,d为111,按位与结果为000即0 print(c & d) # 输出0
注意事项
1. 按位与运算的操作数必须是整数类型,如果传入浮点数会直接抛出类型错误。比如下面的代码会报错:
# 浮点数不能参与按位与运算
try:
print(3.5 & 2)
except TypeError as e:
print(e) # 输出unsupported operand type(s) for &: 'float' and 'int'
2. 负数的按位与运算会涉及补码表示,Python中负数以补码形式存储,对齐规则同样适用左侧补0的逻辑,但补码的高位符号位也需要参与运算,使用时需要额外注意。
3. 不要混淆按位与运算符&和逻辑与关键字and,前者是位运算操作整数,后者是逻辑运算操作布尔值,两者的作用和使用场景完全不同。
常见应用场景
按位与运算常用于掩码操作,比如判断一个数的某一位是否为1。例如判断十进制数5(二进制101)的第0位是否为1,可以用5和1(二进制001)做按位与:
num = 5 # 二进制101
mask = 1 # 二进制001,用来检测第0位
if num & mask == 1:
print("第0位为1")
else:
print("第0位为0")
运行上述代码会输出第0位为1,符合5的二进制表示特征。