程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

揭秘Python位运算:左移翻倍,右移减半!代码效率提升新姿势

hfteth 2025-08-05 18:18:50 技术文章 3 ℃

导语: 在Python(或其他编程语言)中,位运算符直接操作数据的二进制位,效率极高。今天带你看懂按位与、按位或,以及神奇的移位运算——左移一位相当于乘2,右移一位相当于除2!代码实测验证!


一、 什么是位运算符?

位运算符直接对整数的二进制位进行操作。理解它,需要先将数据转换成二进制形式。



二、 按位与 (&):同为1,结果才为1

  • 规则: 两个操作数的对应二进制位,如果都是1,则结果位为1;否则为0。
  • 键盘符号: & (通常位于数字键7上方)
  • 示例: 4 & 8
    • 4 的二进制 (8位):0000 0100
    • 8 的二进制 (8位):0000 1000
    • 按位与运算:
0000 0100  (4)
0000 1000  (8)
---------- &
0000 0000  (0)  // 对应位没有同时为1的情况
  • 结果:0
  • 代码验证:
print(4 & 8)  # 输出: 0

三、 按位或 (|):有1则1,全0才0

  • 规则: 两个操作数的对应二进制位,如果有1个是1,则结果位为1;只有全为0时,结果位才为0。
  • 示例: 4 | 8
    • 4 的二进制 (8位):0000 0100
    • 8 的二进制 (8位):0000 1000
    • 按位或运算:
0000 0100  (4)
0000 1000  (8)
---------- |
0000 1100  (12)  // 第2、3位至少有一个是1
  • 结果:12 (1100 二进制 = 8 + 4 = 12)
  • 代码验证:
print(4 | 8)  # 输出: 12

四、 移位运算:高效乘除的秘诀!

  1. 移位运算直接移动二进制位的位置,效率远高于普通乘除法。
  • 左移位运算符 (<<):低位补0,相当于乘2
    • 规则: 将数字的二进制表示向左移动指定的位数。移出的高位丢弃,低位用0填充
    • 效果: 每左移1位,相当于原数乘以2
    • 示例 (4 << 1):
      • 4 的二进制 (8位):0000 0100
      • 左移1位: 0000 1000 (高位0移出丢弃,低位补0)
      • 结果:8 (1000 二进制 = 8) -> 4 * 2 = 8
    • 示例 (4 << 2):
      • 左移2位: 0001 0000 (移2位,低位补2个0)
      • 结果:16 (10000 二进制 = 16) -> 4 * 4 = 16
    • 代码验证:
print(4 << 1)  # 输出: 8  (4 * 2)
print(4 << 2)  # 输出: 16 (4 * 4)
  1. 右移位运算符 (>>):高位补0,相当于除2(向下取整)
  • 规则: 将数字的二进制表示向右移动指定的位数。移出的低位丢弃,高位用0填充(对于正数)。
  • 效果: 每右移1位,相当于原数除以2(向下取整)
  • 示例 (4 >> 1):
    • 4 的二进制 (8位):0000 0100
    • 右移1位: 0000 0010 (低位0移出丢弃,高位补0)
    • 结果:2 (10 二进制 = 2) -> 4 / 2 = 2
  • 示例 (4 >> 2):
    • 右移2位: 0000 0001 (移2位,高位补2个0)
    • 结果:1 (1 二进制 = 1) -> 4 / 4 = 1
  • 代码验证:
print(4 >> 1)  # 输出: 2 (4 / 2)
print(4 >> 2)  # 输出: 1 (4 / 4)

总结:

  • & (按位与): 同1则1。
  • | (按位或): 有1则1。
  • << (左移): a << n 等价于 a * (2 ** n),高效实现乘以2的n次方。
  • >> (右移): a >> n 等价于 a // (2 ** n) (对于正数),高效实现除以2的n次方(向下取整)。

掌握位运算,尤其是高效的移位操作,能让你写出性能更优的Python代码!特别是在处理底层、算法优化或性能敏感场景时非常有用。快动手试试吧!

Tags:

最近发表
标签列表