负数的按位与运算
来源: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回答
-
这是一个很好的问题,不过可能很多同学可能还不理解同学的疑问,这里先做展开,再回答为什么。
print((-100)&0x7fffffff) 这是一个Python语句,意思是将两个数字进行按位与运算,再输出十进制结果,下面一行也是一样的意思。
同学的问题是,与运算为什么没有把-100的符号位给覆盖掉。
首先与运算一般很少使用负数进行与运算的
与运算其实是使用补码进行运算的,这也是为什么得到的结果是这么大的结果
为什么符号位去掉了,因为是使用补码进行运算的,自然就都是正数了。
042021-10-09
相似问题