负数的按位与运算

来源:4-3 有符号数与无符号数

wxz123

2019-09-26

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

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

写回答

1回答

咚咚呛

2019-09-26

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

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

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

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

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

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


0
4
咚咚呛
回复
Nicas
这个是同学拓展提到的问题哈,涉及的知识点相对比较综合,你可以看一下解答过程。
2021-10-09
共4条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程