发布于 2022-10-13 09:19:55
当你有一个固定数量的比特,倒置它们是很容易的-只要倒置它们。例如,我们使用4位整数,5 (0b0101)的逆是0b1010。
然而,Python有任意大小的整数,这使得事情变得有点诡计。如果我们倒置5 (0b101),结果是1010还是11111010或1111111111111010还是什么?因此,Python 定义从整数的角度(在数学意义上,与位字符串相反);~x ≝ -(x+1)。为什么是这样的定义?当处理两个负数的补码表示时,neg(x) = inv(x)+1,所以inv(x) = neg(x)-1 = -(x+1)是有意义的.这就是为什么~5会出现在-6上。
这就是为什么你会得到负数,但是你怎么得到你期望的正值呢?语言规范没有明确地说明它,但是按位的&和|运算符似乎把否定词视为左边的“足够”的负数。这意味着,如果你只屏蔽了尽可能多的右边位,你就会得到一个正数。例如,如果我们想反转一个4位数字5,我们可以做bin(~0b101 & 0b1111并得到预期的0b1010。
您似乎期望8位数字,例如bin(~0b00100000 & 0xff)给您0b11011111。
https://stackoverflow.com/questions/74040562
复制相似问题