大话 Python:python 基础巩固 -- 位运算的奥妙

位运算是直接对内存中的二进制位进行操作,因此,它的运算效率相比一般的数学运算是比较高的。一般情况下,位运算主要分为六种:与运算、或运算、异或运算、取反运算、左移运算、右移运算。

在开始之前,先介绍一下将十进制转换成二进制的方法。为节约篇幅说明后面的内容,此处我们直接使用 python 内置的 bin() 函数将整数转换为二进制。

注意:若操作系统为32位,则二进制根据位数补全32位即可,以下用低位说明问题,如 10 的二进制计算出为 1010,则补全32位应为 00000000000000000000000000001010。

1def toBin(num):
2   # 十进制转换成二进制
3   res = bin(int(num))
4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
5   return res[2:]
6
7if __name__ == '__main__':
8   print toBin(10)

1、与运算

1def toBin(num):
 2   # 十进制转换成二进制
 3   res = bin(int(num))
 4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 5   return res[2:]
 6
 7if __name__ == '__main__':
 8   print toBin(10)
 9   结果10的二进制是1010
10   print toBin(8)
11   结果8的二进制是1000
12   根据二进制“与”的计算规则:两个数的相同位都为1时则对比结果为1,否则为0
13   对比结果:1000 转为10进制也就是8
14   print 10 & 8
15   8

2、或运算

1def toBin(num):
 2   # 十进制转换成二进制
 3   res = bin(int(num))
 4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 5   return res[2:]
 6
 7if __name__ == '__main__':
 8   print toBin(10)
 9   结果10的二进制是1010
10   print toBin(8)
11   结果8的二进制是1000
12   根据二进制“或”的计算规则:对应的两个二进位有一个为1时结果位就为1,否则为0
13   对比结果:1010 转为10进制也就是10
14   print 10 | 8
15   10

3、异或运算

 1def toBin(num):
 2   # 十进制转换成二进制
 3   res = bin(int(num))
 4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 5   return res[2:]
 6
 7if __name__ == '__main__':
 8   print toBin(10)
 9   结果10的二进制是1010
10   print toBin(8)
11   结果8的二进制是1000
12   根据二进制“异或”的计算规则:两个对应的二进位相异时结果为1,否则为0
13   对比结果:0010 转为10进制也就是2
14   print 10 ^ 8
15   2

4、取反运算

1# 正数按位取反
 2def toBin(num):
 3   # 十进制转换成二进制
 4   res = bin(int(num))
 5   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 6   return res[2:]
 7
 8if __name__ == '__main__':
 9   print toBin(10)
10   结果10的二进制是1010
11   根据二进制“正数取反”的计算规则:首先 10 为正数它的补码应该为 0101012   紧接着按位取反为 10101,再转为原码为 11010,再对原码加111011,则最后结果为 -11
13   print ~10
14   -11
15   也可以直接使用公式计算:~10 = -(10 + 1)

5、左移运算

1def toBin(num):
 2   # 十进制转换成二进制
 3   res = bin(int(num))
 4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 5   return res[2:]
 6
 7if __name__ == '__main__':
 8   print toBin(10)
 9   结果10的二进制是1010
10   根据二进制“左移”的计算规则:将位数将左移动,遵循低位补0、高位丢弃
11   向左移动一位
12   对比结果:01010 转为10进制也就是20
13   print 10 << 1
14   20

6、右移运算

1def toBin(num):
 2   # 十进制转换成二进制
 3   res = bin(int(num))
 4   # 去掉前两位,因为内置函数转换后前面两个字符是0b
 5   return res[2:]
 6
 7if __name__ == '__main__':
 8   print toBin(10)
 9   结果10的二进制是1010
10   根据二进制“右移”的计算规则:将位数向右移动,遵循低位丢弃、高位补0或补1(正数补0、负数补111   向右移动一位
12   对比结果:0101 转为10进制也就是5
13   print 10 >> 1
14   5

更多精彩前往微信公众号【Python 集中营】,专注后端编程实战,原创文章每天更新!

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python 集中营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值