我想在 Python 中按位而不是像 C 那样处理符号。例如:
>>> x = 4
>>> y = ~x
>>> bin(x)
'0b100'
>>> bin(y)
'0b101'
在上面的代码中,y
is 0b101
,但我希望它是0b011
,字面意思是按位不适用于 number 4
。我怎样才能做到这一点?
我想在 Python 中按位而不是像 C 那样处理符号。例如:
>>> x = 4
>>> y = ~x
>>> bin(x)
'0b100'
>>> bin(y)
'0b101'
在上面的代码中,y
is 0b101
,但我希望它是0b011
,字面意思是按位不适用于 number 4
。我怎样才能做到这一点?
由于 Python 整数都是有符号的,而不是定义的位大小,最简单的方法是只用所需位长度的全 1 掩码进行 XOR。
例如,要获得 4 位的 NOT:
bin(x ^ 0b1111)
测试:
>>> x = 4
>>> bin(x)
'0b100'
>>> bin(x ^ 0b1111)
'0b1011'
你可以生成一个和的mask
位长:x
xor
x
x = 4 # 0b100
width = x.bit_length()
mask = (1 << width) - 1 # mask = 0b111
y = x ^ mask
print(f"{y:0{width}b}") # '011'