0

我想在 Python 中按位而不是像 C 那样处理符号。例如:

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

在上面的代码中,yis 0b101,但我希望它是0b011,字面意思是按位不适用于 number 4我怎样才能做到这一点?

4

2 回答 2

2

由于 Python 整数都是有符号的,而不是定义的位大小,最简单的方法是只用所需位长度的全 1 掩码进行 XOR。

例如,要获得 4 位的 NOT:

bin(x ^ 0b1111)

测试:

>>> x = 4
>>> bin(x)
'0b100'
>>> bin(x ^ 0b1111)
'0b1011'
于 2022-01-18T10:41:34.123 回答
1

你可以生成一个和的mask位长:xxorx

x = 4  # 0b100
width = x.bit_length()
mask = (1 << width) - 1  # mask = 0b111
y = x ^ mask
print(f"{y:0{width}b}")  # '011'
于 2022-01-18T10:43:26.353 回答