为什么 while(n) n = n>>1 循环不以负数 n 终止
Why while(n) n = n>>1 loop does not terminate with negative n
我的目标是编写一个程序来计算 python 中表示数字所需的位数,如果我选择 number = -1
或任何负数,程序不会终止,这是我的代码:
number = -1
cnt = 0
while(number!=0):
number = number>>1
cnt+=1
print(cnt)
我认为它应该打印 32 并终止。所有负数都一样。如果您能澄清其背后的原因,我将不胜感激。
在正常 CPU 或 C 语言中,算术右移向 -infinity 舍入。我认为它在 Python 中是相同的。
您可能正在考虑 2 的补码整数,其中 -1
设置了所有位。 2 的补码有符号右移在符号位的副本中移动,而不是零。
-1 >> 1
= -1
Python 整数是任意精度的,所以这没有多大意义。最大宽度实际上是无限的。
我的目标是编写一个程序来计算 python 中表示数字所需的位数,如果我选择 number = -1
或任何负数,程序不会终止,这是我的代码:
number = -1
cnt = 0
while(number!=0):
number = number>>1
cnt+=1
print(cnt)
我认为它应该打印 32 并终止。所有负数都一样。如果您能澄清其背后的原因,我将不胜感激。
在正常 CPU 或 C 语言中,算术右移向 -infinity 舍入。我认为它在 Python 中是相同的。
您可能正在考虑 2 的补码整数,其中 -1
设置了所有位。 2 的补码有符号右移在符号位的副本中移动,而不是零。
-1 >> 1
= -1
Python 整数是任意精度的,所以这没有多大意义。最大宽度实际上是无限的。