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

标签 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 并终止。对于所有负数都是一样的。如果您能澄清其背后的原因,我将不胜感激。

最佳答案

在普通 CPU 上或在 C 等语言中,算术右移向 -infinity 舍入。我认为在 Python 中也是如此。

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

-1 >> 1 = -1


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

关于python - 为什么 while(n) n = n>>1 循环不会以负 n 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58235010/

相关文章:

python - 是否可以通过 pydantic 中的单独父类来组织验证

python - 编写计算测验分数总和的程序 - 列表

python - 如何使用 Django 2.* mysqlclient 在 MySQL 数据库中设置排序规则?

python-3.x - 如何使用 pygame 和 pyopengl 正确添加灯光以使对象获得更好的 View

cpu-architecture - 为什么CPU寄存器可以快速访问?

cpu-architecture - CISC ISA 下的 RISC

cpu-architecture - 指令调度是什么意思

R 的 'zoo' 包的 Python 等价物

python - PyQt4 pyuic4 spacerItem 作为类的成员

python - 通过 4 个索引同时迭代