请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

负数的按位与运算

print((-100)&0x7fffffff) #7个f 0x7fffffff为15个1 输出:2147483548
print((-100)&0x7fffffffffffffff) #15个f 0x7fffffffffffffff为63个1 输出:9223372036854775708

这个按位与的话,不应该是把-100的符号位去掉,只保留数值部分吗?
为什么这么输出不是正的100呢

正在回答

1回答

这是一个很好的问题,不过可能很多同学可能还不理解同学的疑问,这里先做展开,再回答为什么。

print((-100)&0x7fffffff) 这是一个Python语句,意思是将两个数字进行按位与运算,再输出十进制结果,下面一行也是一样的意思。

同学的问题是,与运算为什么没有把-100的符号位给覆盖掉。

  1. 首先与运算一般很少使用负数进行与运算的

  2. 与运算其实是使用补码进行运算的,这也是为什么得到的结果是这么大的结果

  3. 为什么符号位去掉了,因为是使用补码进行运算的,自然就都是正数了。


0 回复 有任何疑惑可以回复我~
  • 提问者 wxz123 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-09-26 23:06:21
  • 提问者 wxz123 #2
    老师,假如计算(-7)&0b10111,这个-7的补码是按(10111)的补码11001算,还是按(1111)的补码1001算呢?具体这个补码和0b10111按位与时,得到的结果应该是0b10001,这里的符号位该怎么看呢?为啥不是-1而是17呢?
    回复 有任何疑惑可以回复我~ 2019-09-26 23:22:39
  • Nicas #3
    老师请问这个是从哪一个课教的?我好像没学到这个
    回复 有任何疑惑可以回复我~ 2021-10-09 19:36:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信