C 和 Python 的按位 NOT 运算符是否不同?

Is bitwise NOT operator different for C and Python?

位非运算符:Returns对Python中数字的恭维。

在 C 中,bitwise not operator 只是翻转位。所以这两种语言的表现不同。

Q1:Python

中是否有等效的位翻转操作

Q2:一个数的补码通常是翻转运算。但是,在 link for Python 中,该示例包含相反的符号,后跟加 1 的结果,即。 ~x = ~(binary_x) = -(binary_x+1).

根据我的理解,此操作不等于 C 中的补码。相反,Python 中的非看起来类似于 2 的补码。

那么这个操作是什么,在 Python 中按位非 ~ 的正确方法是什么?

使用 struct 模块,您可以看到 ~ 确实 有效地 翻转位,当固定数量的位使解释有意义时。

Python 中的 int 使用任意精度,因此所有值都使用最小数量的 30 位块存储,这些块是值的无符号大小所必需的,外加一个显式符号位。

这是一个生成 1 和 ~1 的固定精度表示的示例:

>>> struct.pack("!l", 1)
b'\x00\x00\x00\x01'
>>> struct.pack("!l", ~1)
b'\xff\xff\xff\xfe'

如您所见,~11111 1111 1111 1111 1111 1111 1111 1110