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'
如您所见,~1
是 1111 1111 1111 1111 1111 1111 1111 1110
位非运算符: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'
如您所见,~1
是 1111 1111 1111 1111 1111 1111 1111 1110