我的目标是编写一个程序来计算表示python中一个数字所需的位数,以防万一我选择number = -1
或任何负数,该程序不会终止,这是我的代码:
number = -1
cnt = 0
while(number!=0):
number = number>>1
cnt+=1
print(cnt)
我认为它应该打印32并终止。所有负数都一样。如果您弄清其背后的原因,我将不胜感激。
答案 0 :(得分:3)
在普通CPU或C语言中,算术右移取整为-infinity。我认为在Python中也是一样。
您可能正在考虑2的补码整数,其中-1
设置了所有位。 2的补码符号右移将符号位的副本而不是零移位。
-1 >> 1
= -1
Python整数是任意精度的,因此这没有多大意义。最大宽度实际上是无限的。