按位运算符 ~ 不仅仅是 python 中的 "flipping bits"。这是为什么?
Bitwise operator ~ isn't simply "flipping bits" in python. Why is that?
我期望 bin(~0b111000) 到 return 值 0b000111 因为据我了解 NOT 操作将 return 相反的位作为输出。
我一直在读“~x: Returns x 的补码 - 通过将每个 1 换成 0 和每个 0 换成 1 得到的数字" 所以我不知道我的逻辑哪里出了问题。
为什么它显示 -(x + 1) 而不是 字面上翻转 所有位?
它是翻转所有位!
您似乎将 0b111000
视为 6 位值。事实并非如此。 python3 中的所有整数都有(至少在概念上)无限多的位。所以想象 0b111000
是 shorthand 对于 0b[...]00000111000
.
现在,翻转所有位的结果是 0b[...]11111000111
。请注意在这种情况下 [...] 代表无限多个 ones,因此从数学上讲这很有趣。而我们根本无法打印无限多个,所以没办法直接打印这个数。
然而,由于这是 2 的补码,这仅表示:如果我们向其添加 0b111001
,则该数字变为 0
。这就是为什么您会看到 -0b111001
.
我期望 bin(~0b111000) 到 return 值 0b000111 因为据我了解 NOT 操作将 return 相反的位作为输出。
我一直在读“~x: Returns x 的补码 - 通过将每个 1 换成 0 和每个 0 换成 1 得到的数字" 所以我不知道我的逻辑哪里出了问题。
为什么它显示 -(x + 1) 而不是 字面上翻转 所有位?
它是翻转所有位!
您似乎将 0b111000
视为 6 位值。事实并非如此。 python3 中的所有整数都有(至少在概念上)无限多的位。所以想象 0b111000
是 shorthand 对于 0b[...]00000111000
.
现在,翻转所有位的结果是 0b[...]11111000111
。请注意在这种情况下 [...] 代表无限多个 ones,因此从数学上讲这很有趣。而我们根本无法打印无限多个,所以没办法直接打印这个数。
然而,由于这是 2 的补码,这仅表示:如果我们向其添加 0b111001
,则该数字变为 0
。这就是为什么您会看到 -0b111001
.