【Leetcode】【面试经典150】【位运算】

75 阅读2分钟

概念

位运算是一种在二进制层面操作数据的计算方式,它直接对整数的二进制位进行操作,因此执行效率极高。在 Python 中,位运算主要用于底层编程、数据加密、算法优化等场景。下面我将详细介绍 Python 中常用的位运算及其应用。

常见的位运算操作

1.按位与

  • 规则:两个对应位都为 1 时,结果位才为 1,否则为 0。
a = 5 # 二进制: 0101 
b = 3 # 二进制: 0011 
print(a & b) # 结果: 1 (二进制: 0001)
  • 应用

    • 清零特定位(如num & 0xF0保留高 4 位)。
    • 判断奇偶性:num & 1 == 0则为偶数。

2.按位或

  • 规则:两个对应位中有一个为 1 时,结果位即为 1。

  • 示例

    a = 5  # 二进制: 0101
    b = 3  # 二进制: 0011
    print(a | b)  # 结果: 7 (二进制: 0111)
    
  • 应用

    • 将特定位设置为 1(如num | 0x01强制最低位为 1)。

3. 按位异或(^

  • 规则:两个对应位不同时,结果位为 1,相同则为 0。

  • 示例

    a = 5  # 二进制: 0101
    b = 3  # 二进制: 0011
    print(a ^ b)  # 结果: 6 (二进制: 0110)
    
  • 特性

    • 交换律:a ^ b == b ^ a
    • 自反性:a ^ a == 0a ^ 0 == a
  • 应用

    • 不使用临时变量交换两数:a, b = a ^ b, a ^ b ^ b
    • 加密和校验(如奇偶校验位)。

4. 按位取反(~

  • 规则:对所有位取反(0 变 1,1 变 0)。

  • 示例

    a = 5  # 二进制: 0101
    print(~a)  # 结果: -6
    
  • 计算逻辑:在补码表示中,~x等价于-(x+1)

5. 左移(<<

  • 规则:将二进制位向左移动指定位数,右边补 0。

  • 示例

    a = 5  # 二进制: 0101
    print(a << 2)  # 结果: 20 (二进制: 010100)
    
  • 特性:左移n位等价于乘以2^n,即a << n == a * (2**n)

6. 右移(>>

  • 规则:将二进制位向右移动指定位数,左边补符号位(正数补 0,负数补 1)。

  • 示例

    a = 5  # 二进制: 0101
    print(a >> 1)  # 结果: 2 (二进制: 0010)
    
  • 特性:右移n位等价于整除2^n,即a >> n == a // (2**n)


【代码练习】