按位不在 python 无符号数
Bitwise not in python over unsigned numbers
我想在 Python 中不按位进行操作,但不需要像 C 那样处理符号。例如:
>>> x = 4
>>> y = ~x
>>> bin(x)
'0b100'
>>> bin(y)
'0b101'
在上面的代码中,y
是 0b101
,但我希望它是 0b011
,按位不应用于数字 4
。 我该怎么做?
由于 Python 整数都是有符号的并且没有定义的位大小,最简单的方法是只与所需位长度的全 1 掩码进行异或。
例如获取 4 位的 NOT:
bin(x ^ 0b1111)
测试:
>>> x = 4
>>> bin(x)
'0b100'
>>> bin(x ^ 0b1111)
'0b1011'
你可以用 x
:
生成位长度为 x
和 xor
的 mask
x = 4 # 0b100
width = x.bit_length()
mask = (1 << width) - 1 # mask = 0b111
y = x ^ mask
print(f"{y:0{width}b}") # '011'
我想在 Python 中不按位进行操作,但不需要像 C 那样处理符号。例如:
>>> x = 4
>>> y = ~x
>>> bin(x)
'0b100'
>>> bin(y)
'0b101'
在上面的代码中,y
是 0b101
,但我希望它是 0b011
,按位不应用于数字 4
。 我该怎么做?
由于 Python 整数都是有符号的并且没有定义的位大小,最简单的方法是只与所需位长度的全 1 掩码进行异或。
例如获取 4 位的 NOT:
bin(x ^ 0b1111)
测试:
>>> x = 4
>>> bin(x)
'0b100'
>>> bin(x ^ 0b1111)
'0b1011'
你可以用 x
:
x
和 xor
的 mask
x = 4 # 0b100
width = x.bit_length()
mask = (1 << width) - 1 # mask = 0b111
y = x ^ mask
print(f"{y:0{width}b}") # '011'