Python位运算符:&、|、^、~、<<、>>

Python位运算符:&、|、^、~、<<、>>

运算符描述示例
&按位与,都为1,结果为1,有一个0,就为0a & b
|按位或,都为0,结果为0,有一个1,就为1a | b
^按位异或,不同,结果为1,相同,就为0a ^ b
~按位取反,1变0,0变1~a
<<左移动,高位丢弃,低位补0a << 2,左移2位
>>右移动,丢弃右移位数,高位补0a >> 3,右移3位
a = 0b00111100  # 60的二进制
b = 0b00001101  # 13的二进制

print(a&b,'=',bin(a&b))#12 = 0b1100
print(a|b,'=',bin(a|b))#61 = 0b111101
print(a^b,'=',bin(a^b))#49 = 0b110001
print(~a,'=',bin(~a))#-61 = -0b111101
print(a<<2,'=',bin(a<<2))#240 = 0b11110000
print(a>>2,'=',bin(a>>2))#15 = 0b1111

手动运算示例:

图中取反示例不全,注意下文——按位取反详解

在这里插入图片描述

按位取反详解

计算机中有原码、反码、补码,均有符号位和数值位,符号位用0表示“正”,用1表示“负”。

计算机一般用补码来表示和存储数值,因为补码可以将符号位和数值位统一处理。

正数的补码,与原码相同。

负数的补码,将原码的数值位取反(0变1,1变0),再加1。

  1. 60取反 = -61
  • 60对应的二进制数:0011 1100(正数的原码和补码)
  • 所有位取反::::1100 0011(负数的补码)
  • 减1,变反码: : :1100 0010(负数的反码)
  • 数值位取反:: ::1011 1101(负数的原码)
  1. -30取反 = 29
  • -30对应的二进制数:1001 1110(负数的原码)
  • 数值位取反:: : :1110 0001(负数的反码)
  • 加1,变补码::::1110 0010(负数的补码)
  • 所有位取反:: : :0001 1101(正数的补码和原码)
print(~60,'=',bin(~60))#-61 = -0b111101
print(~-30,'=',bin(~-30))#29 = 0b11101
  • 20
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值