位运算是 Python 中贴近计算机底层的运算方式,它直接对二进制位(0 和 1)进行操作,执行效率远高于普通的算术运算。很多新手觉得位运算抽象难理解,但只要掌握二进制的核心逻辑,再结合实际例子,就能轻松掌握。本文将系统讲解 Python 中 6 种核心位运算(左移、右移、按位与、按位或、按位异或、按位取反),从原理到示例,再到实战场景,全方位拆解。


一、前置知识:二进制与位运算基础

在学习位运算前,必须先明确两个核心概念:

  1. 二进制:计算机存储数据的最小单位是位(bit),8 位组成 1 字节(Byte)。我们日常使用的十进制数,计算机都会转换为二进制处理(如十进制 5 → 二进制0101)。
  2. 位运算规则:所有位运算均基于二进制位的逐位操作,运算对象需先转换为二进制,再按规则计算,最终可转回十进制。

为方便讲解,本文示例统一使用8 位二进制(不足 8 位时高位补 0),且默认处理整数(Python 支持任意长度二进制,但 8 位更易理解)。

二、6 种核心位运算详解(附大量示例)

1. 按位左移 <<

原理

将数字的二进制位全部向左移动指定位数,右侧空出的位补 0,高位溢出则舍弃。

数学等价关系x << nx * (2^n)(无溢出时完全等价)。

示例(十进制→二进制→运算→转回十进制)
# 示例1:5 << 1(5的二进制:0000 0101)
print(5 << 1)  # 输出10
# 运算过程:0000 0101 左移1位 → 0000 1010(十进制10)

# 示例2:5 << 2
print(5 << 2)  # 输出20
# 运算过程:0000 0101 左移2位 → 0001 0100(十进制20)

# 示例3:溢出场景(8位限制下)
# 128的8位二进制:1000 0000,左移1位后高位1溢出,结果为0
print(128 << 1)  # 无8位限制时Python输出256,若限定8位则为0
应用场景
  • 快速计算乘以 2 的 n 次方(比*运算更快);
  • 数据压缩、位图处理中扩展位宽。

2. 按位右移 >>

原理

将数字的二进制位全部向右移动指定位数,左侧空出的位:

  • 正数:补 0;
  • 负数:补 1(Python 中负数以补码形式存储)。数学等价关系x >> nx // (2^n)(向下取整)。
示例
# 示例1:正数右移(10 >> 1,10的二进制:0000 1010)
print(10 >> 1)  # 输出5
# 运算过程:0000 1010 右移1位 → 0000 0101(十进制5)

# 示例2:正数右移(10 >> 2)
print(10 >> 2)  # 输出2
# 运算过程:0000 1010 右移2位 → 0000 0010(十进制2)

# 示例3:负数右移(-10 >> 1,-10的8位补码:1111 0110)
print(-10 >> 1)  # 输出-5
# 运算过程:1111 0110 右移1位 → 1111 1011(十进制-5)
应用场景
  • 快速计算除以 2 的 n 次方(向下取整,比//更快);
  • 提取数字的高位部分。

3. 按位与 &

原理

两个数字的二进制位逐位比较,只有对应位都为 1时,结果位才为 1,否则为 0。核心口诀:同 1 则 1,有 0 则 0。

示例
# 示例1:5 & 3(5:0000 0101;3:0000 0011)
print(5 & 3)  # 输出1
# 逐位运算:
#  0000 0101
# &0000 0011
# -----------
#  0000 0001(十进制1)

# 示例2:6 & 4(6:0000 0110;4:0000 0100)
print(6 & 4)  # 输出4
# 逐位运算:
#  0000 0110
# &0000 0100
# -----------
#  0000 0100(十进制4)

# 示例3:判断奇偶(最经典应用)
# 原理:奇数的二进制最后一位是1,偶数是0;1的二进制是0000 0001
print(7 & 1)   # 1 → 奇数
print(8 & 1)   # 0 → 偶数
应用场景
  • 判断数字奇偶(x & 1,结果 1 为奇,0 为偶);
  • 提取二进制指定位(如保留最后 3 位:x & 0b111);
  • 权限控制(如判断用户是否有某权限)。

4. 按位或 |

原理

两个数字的二进制位逐位比较,只要对应位有一个为 1,结果位就为 1,否则为 0。核心口诀:有 1 则 1,同 0 则 0。

示例
# 示例1:5 | 3(5:0000 0101;3:0000 0011)
print(5 | 3)  # 输出7
# 逐位运算:
#  0000 0101
# |0000 0011
# -----------
#  0000 0111(十进制7)

# 示例2:6 | 4(6:0000 0110;4:0000 0100)
print(6 | 4)  # 输出6
# 逐位运算:
#  0000 0110
# |0000 0100
# -----------
#  0000 0110(十进制6)

# 示例3:权限叠加(如用户同时拥有读和写权限)
READ = 1  # 0001
WRITE = 2 # 0010
user_perm = READ | WRITE
print(user_perm)  # 3(0011)→ 同时拥有读+写权限
应用场景
  • 权限叠加(如给用户添加多个权限);
  • 置位操作(将二进制指定位置为 1)。

5. 按位异或 ^

原理

两个数字的二进制位逐位比较,对应位不同则为 1,相同则为 0核心口诀:异则 1,同则 0。特殊性质

  • x ^ x = 0(相同数字异或为 0);
  • x ^ 0 = x(任何数异或 0 等于自身);
  • a ^ b ^ b = a(异或两次同一数,恢复原值)。
示例
# 示例1:5 ^ 3(5:0000 0101;3:0000 0011)
print(5 ^ 3)  # 输出6
# 逐位运算:
#  0000 0101
# ^0000 0011
# -----------
#  0000 0110(十进制6)

# 示例2:利用异或交换两个数(无需临时变量)
a = 5
b = 8
a = a ^ b  # a = 5^8 = 13(0000 1101)
b = a ^ b  # b = 13^8 = 5(恢复a的原值)
a = a ^ b  # a = 13^5 = 8(恢复b的原值)
print(a, b)  # 输出8 5

# 示例3:找数组中唯一出现一次的数(经典面试题)
# 原理:相同数异或为0,0异或唯一数等于自身
nums = [2, 3, 2, 4, 4]
res = 0
for num in nums:
    res ^= num
print(res)  # 输出3(唯一出现一次的数)
应用场景
  • 交换两个数(无需临时变量);
  • 找数组中唯一出现的数;
  • 数据加密 / 解密(异或加密,加密解密用同一密钥)。

6. 按位取反 ~

原理

对数字的二进制位逐位取反(0 变 1,1 变 0),是单目运算符(仅需一个操作数)。⚠️ 关键注意:Python 中整数以补码存储,且没有位数限制,因此取反结果需结合补码规则理解:数学等价关系~x = -(x + 1)

示例
# 示例1:~5(5的二进制:...0000 0101)
print(~5)  # 输出-6
# 运算过程:
# 原码:0000 0101 → 取反:1111 1010(补码)
# 补码转原码:1111 1010 → 减1:1111 1001 → 取反:0000 0110 → 加负号:-6

# 示例2:~0
print(~0)  # 输出-1
# 原理:~0 = -(0+1) = -1

# 示例3:~-3
print(~-3)  # 输出2
# 原理:~-3 = -(-3 + 1) = 2
应用场景
  • 快速计算负数(~x + 1 = -x);
  • 位掩码反转(如将某几位的 0 变 1、1 变 0)。

三、位运算核心总结

运算符 名称 核心规则 典型应用
<< 按位左移 左移 n 位 = 乘以 2^n 快速乘 2、扩展位宽
>> 按位右移 右移 n 位 = 除以 2^n(向下取整) 快速除 2、提取高位
& 按位与 同 1 则 1,有 0 则 0 判断奇偶、提取指定位
` ` 按位或 有 1 则 1,同 0 则 0 权限叠加、置位操作
^ 按位异或 异则 1,同则 0 交换数、找唯一数、加密
~ 按位取反 0 变 1,1 变 0(~x=-(x+1)) 快速求负、位掩码反转

四、位运算的优势与实战建议

  1. 效率优势:位运算直接操作二进制位,无需进制转换,比算术运算(+*/)更快,适合高性能场景(如游戏开发、数据处理);
  2. 代码简洁:异或交换数、找唯一数等场景,位运算能大幅简化代码;
  3. 新手注意
    • 优先理解二进制转换规则,再记运算口诀;
    • 负数位运算需结合补码理解,先掌握正数运算再扩展;
    • 实际开发中,除非追求极致性能,否则优先用易读的算术运算(如x*2x<<1更易理解)。

位运算看似抽象,但只要结合二进制原理和实际示例反复练习,就能从 “看不懂” 到 “熟练用”。掌握位运算,不仅能提升代码效率,还能理解计算机底层数据处理逻辑,对深入学习编程至关重要。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐