Python 获取并设置值的特定位

Python 获取并设置值的特定位,python,python-3.9,Python,Python 3.9,对于给定的值,我需要能够读写该值的特定位 示例: n=341 #垃圾箱(341)为“0b101010101” 获取_位(n,开始=2,结束=6) #返回10='0b1010' n=设置_位(n,开始=2,结束=6,新值=6) #用0b0110替换n的位[2:6] #使n=309='0b100110101' 这里有三个函数可以做到这一点!(第一个包含一些常见代码): def掩码和移位(开始、结束、长度): “”“返回掩码和移位值以访问位的[:]” shift=长度-结束 掩码=(1>移位 def

对于给定的值,我需要能够读写该值的特定位

示例

n=341
#垃圾箱(341)为“0b101010101”
获取_位(n,开始=2,结束=6)
#返回10='0b1010'
n=设置_位(n,开始=2,结束=6,新值=6)
#用0b0110替换n的位[2:6]
#使n=309='0b100110101'

这里有三个函数可以做到这一点!(第一个包含一些常见代码):

def掩码和移位(开始、结束、长度):
“”“返回掩码和移位值以访问位的[:]”
shift=长度-结束
掩码=(1>移位
def set_位(n,开始,结束,新值,长度:int=None):
“”“将的位[:]更改为并返回
强制进入该位长度“”
掩码,移位=掩码和移位(开始,结束,长度=n。如果长度不是其他长度,则为位长度()

return(n&~mask)|(newValue这里有三个函数可以实现这一点!(第一个函数包含一些常见代码):

def掩码和移位(开始、结束、长度):
“”“返回掩码和移位值以访问位的[:]”
shift=长度-结束
掩码=(1>移位
def set_位(n,开始,结束,新值,长度:int=None):
“”“将的位[:]更改为并返回
强制进入该位长度“”
掩码,移位=掩码和移位(开始,结束,长度=n。如果长度不是其他长度,则为位长度()

return(n&~mask)|(newValue通常位是从右向左编号的。如果使用标准约定和开始-停止值(如范围),则使用逐位运算符实现函数会更简单:

def get_bits(n, start, end):
    return (n&((1<<end)-1))>>start

def set_bits(n, start, end, value):
    mask = (1<<end) - (1<<start) 
    return (n&~mask) | (value<<start)&mask

通常位是从右到左编号的。如果使用标准约定和开始-停止值(如范围),则使用按位运算符实现函数会更简单:

def get_bits(n, start, end):
    return (n&((1<<end)-1))>>start

def set_bits(n, start, end, value):
    mask = (1<<end) - (1<<start) 
    return (n&~mask) | (value<<start)&mask