按位不在 python 无符号数

Bitwise not in python over unsigned numbers

我想在 Python 中不按位进行操作,但不需要像 C 那样处理符号。例如:

>>> x = 4
>>> y = ~x
>>> bin(x)
'0b100'
>>> bin(y)
'0b101'

在上面的代码中,y0b101,但我希望它是 0b011,按位不应用于数字 4我该怎么做?

由于 Python 整数都是有符号的并且没有定义的位大小,最简单的方法是只与所需位长度的全 1 掩码进行异或。

例如获取 4 位的 NOT:

bin(x ^ 0b1111)

测试:

>>> x = 4
>>> bin(x)
'0b100'
>>> bin(x ^ 0b1111)
'0b1011'

你可以用 x:

生成位长度为 xxormask
x = 4  # 0b100
width = x.bit_length()
mask = (1 << width) - 1  # mask = 0b111
y = x ^ mask
print(f"{y:0{width}b}")  # '011'