[集锦]Python位运算

本文深入探讨了位运算的基本概念及其实用技巧,包括如何使用位运算进行数据操作,如判断奇偶性、改变特定位的状态等。此外,还介绍了如何利用位运算优化算法,如快速计算和枚举子集。文章通过实例演示了位运算在实际编程中的高效应用。

基本位运算

运算符说明演示
<<左移 n n n位相当于 × 2 n \times 2^n ×2n5 << 3 == 5 * np.power(2, 3)
>>右移 n n n位相当于 × 1 2 n \times \frac{1}{2^n} ×2n1128 >> 3 == 128 / np.power(2, 3)
&and:同真为真,否则为假5 & 9 == 1
|or:一真即真5 | 9 == 13
^xor:同假异真5 ^ 9 == 12
~no~5 == -6

技巧应用

  • Matrix67基础
    • 判断奇偶性
       x & 1 
      
    • 去掉最后一位(二进制少一位)
      x >> 1
      
    • 在最后加一个0
      x << 1
      
    • 在最后加一个1
      (x << 1) + 1
      
    • 把最后一位变成1
      x | 1
      
    • 把最后一位变成0
      (x | 1) - 1
      
    • 最后一位取反
      x ^ 1
      
    • 把右数第k位(从1开始)变成1
      x | (1 << (k - 1))
      
    • 把右数第k位变成0
      x & ~ (1 << (k - 1))
      
    • 右数第k位取反
      x ^ (1 << (k - 1))
      
    • 取末k位
      x & ((1 << k) - 1)
      
    • 取右数第k位
      x >> (k - 1) & 1
      
    • 把末k位变成1
      x | (1 << k - 1)  <==>  x | (1 << (k - 1))
      
    • 末k位取反
      x ^ (1 << k - 1)
      
    • 把右边连续的1变成0
      x & (x + 1)
      
    • 把右起第一个0变成1
      x | (x + 1)
      
    • 把右边连续的0变成1
      x | (x - 1)
      
    • 取右边连续的1
      x ^ (x - 1)
      
    • 去掉右起第一个1的左边
      x  & (x ^ (x - 1))
      
  • Matrix67进阶篇(1)
  • Matrix67进阶篇(2)
  • Matrix67实战篇
  • 二进制枚举子集:从5个求中抽取任意0-5个求,枚举全部的情况:
    • 组合 combinations
    • 二进制表示: 0 = 00000 0 =00000 0=00000表示全部未抽中, 31 = 11111 = 2 5 − 1 31 =11111 = 2^5 - 1 31=11111=251表示全部抽中,则全部情况为 [ 0 , 31 ] [0, 31] [0,31]
  • 技巧
    • 找出数组中没有重复的数字:相同的数字 异或xor运算后为 0 0 0
    from functools import reduce
    
    reduce(lambda x, y: x^y, t)
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值