unw*_*ind 29
您只需要:
def set_bit(v, index, x):
"""Set the index:th bit of v to 1 if x is truthy, else to 0, and return the new value."""
mask = 1 << index # Compute mask, an integer with just bit 'index' set.
v &= ~mask # Clear the bit indicated by the mask (if x is False)
if x:
v |= mask # If x was True, set the bit indicated by the mask.
return v # Return the result, we're done.
>>> set_bit(7, 3, 1)
15
>>> set_bit(set_bit(7, 1, 0), 3, 1)
13
Run Code Online (Sandbox Code Playgroud)
注意,位数(index
)从0开始,0是最低有效位.
还要注意,返回了新值,没有办法像你显示的那样"就地"修改整数(至少我不这么认为).
Kos*_*Kos 27
这些适用于任何大小的整数,甚至大于32位:
def set_bit(value, bit):
return value | (1<<bit)
def clear_bit(value, bit):
return value & ~(1<<bit)
Run Code Online (Sandbox Code Playgroud)
如果你喜欢简短的东西,你可以使用:
>>> val = 0b111
>>> val |= (1<<3)
>>> '{:b}'.format(val)
'1111'
>>> val &=~ (1<<1)
'1101'
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以使用按位运算. http://wiki.python.org/moin/BitwiseOperators
如果要将给定位设置为1,则可以在给定位置使用按位"或"1:
0b00000111 | 0b00001000 = 0b00001111
要将给定位设置为0,您可以使用按位'和'
0b00001111和0b11111011 = 0b00001011
请注意,0b前缀用于二进制数,0x用于十六进制数.