2

按位非 ( ~) 在为 int 定义特定位长度和格式的语言中得到了很好的定义。由于在 Python 3 中,整数可以是任意长度,因此它们根据定义具有可变位数。在内部,我相信 Python 至少使用 28 个字节来存储一个 int,但当然这些不是按位定义的。

Python如何按位定义不:

  1. 位长是 int 大小、本机平台还是其他什么的函数?
  2. Python 符号是扩展、零扩展还是做其他事情?
4

1 回答 1

3

Python 整数用“无限”个符号位模拟 2 的补码表示(所有 0 位表示 >= 0,所有 1 位表示 < 0)。

所有按位整数运算都保持这种有用的错觉。

例如,0 是无限个 0 位,~0也是无限个 1 位 - 在 2 的补码表示法中是 -1。

>>> ~0
-1

一般情况下~i = -i-1, 在英语中可以读作“的 1 的补i码是i负 1 的 2 的补码”。

对于整数的右移,Python 会填充更多的符号位副本。

于 2021-11-24T18:46:31.833 回答