Python 位运算符

位运算过程

位运算符是对二进制数进行操作。在 Python 中,位运算的过程为:输入数值 -> 原码 -> 补码 -> 位运算 -> 补码 -> 原码 -> 显示数值。我们用位运算符对数值进行位运算,实际上是对该数值的补码进行位运算。位运算的结果仍然是补码,显示该数值时需系统会先转化为原码,然后得出对应的数值。
在这里插入图片描述

位运算例子

  • 二进制与二进制位运算
print(-0b0110 & 0b1111)

输出结果为:10
解释:
-0b0110 原码为-0110,因为是负数,所以补码为11010(添加一位表示符号)。而 0b1111 原码为 01111(添加一位表示符号),因为是正数,补码和原码相同,补码为01111。两者的补码进行 运算,得到结果 01010,并且结果仍是补码。输出显示时,系统会将该补码转化为原码,然后得到真实数值。该补码 01010 为正数*(最高位为符号位),所以原码也为 01010(最高位为符号位),解析为十进制,即得到 10。
倘若两个数位数不一样长,如 -0b0110 & 0b11111,第一个负数长度为 4,而第二个正数长度为 5。那么在进行为运算时,要先使两者长度一致,即在长度较短的那个数前面补 0。则,第一个负数补一个 0 变为 00110。最后,两个数都在前面添加一个符号位。第一个数为负数,求补得到 111010。第二个数为正数,求补不变。所以,此时位运算为 111010 & 011111。符号位也要参与位运算,得到的结果就是 011010。输出显示时,系统会将该补码转化为原码,然后得到真实数值。该补码 011010 为正数(最高位为符号位),所以原码也为 011010(最高位为符号位),解析为十进制,即得到 26。

  • 二进制与十进制位运算
print(-0b0110 & 15)

输出结果:10
解释:十进制数 15 的原码为 01111(添加一位表示符号),其余过程同第一个例子,不再赘述。

  • 二进制与十六进制位运算
print(-0b0110 & 0x0F)

输出结果:10
解释:十六进制数 0x0F 的原码为 01111(添加一位表示符号),其余过程同第一个例子,不再赘述。

  • 十进制与十进制位运算
print(-6 & 15)

输出结果:10

  • 十进制与十六进制位运算
print(-6 & 0x0F)

输出结果:10

  • 十六进制与十六进制位运算
print(-0x6 & 0xF)

输出结果:10

位运算符号

位运算符功能
<<按位左移,左移n位相当于乘以2的n次方
>>按位右移 ,左移n位相当于除以2的n次方
&按位与,如果两个相应的二进制位都为 1,则该位的结果值为 1;否则为 0。
l按位或 ,两个相应的二进制位中只要有一个为 1,该位的结果值为 1;否则为 0。
^按位异或 ,若参加运算的两个二进制位同号则结果为0,异号则结果为1
~按位取反,用来对一个二进制数按位取反,即将0变1,将1变0。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值