为什么while(n)n = n >> 1循环不会以负n终止

时间:2019-10-04 10:54:30

标签: python python-3.x cpu-architecture bit-shift

我的目标是编写一个程序来计算表示python中一个数字所需的位数,以防万一我选择number = -1或任何负数,该程序不会终止,这是我的代码:

number = -1
cnt = 0
while(number!=0):
    number = number>>1
    cnt+=1
print(cnt)

我认为它应该打印32并终止。所有负数都一样。如果您弄清其背后的原因,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

在普通CPU或C语言中,算术右移取整为-infinity。我认为在Python中也是一样。

您可能正在考虑2的补码整数,其中-1设置了所有位。 2的补码符号右移将符号位的副本而不是零移位。

-1 >> 1 = -1


Python整数是任意精度的,因此这没有多大意义。最大宽度实际上是无限的。