Python 多个位集的返回状态
我正在根据传递的变量值检查当前单个位的状态。 我试过了Python 多个位集的返回状态,python,bit-manipulation,Python,Bit Manipulation,我正在根据传递的变量值检查当前单个位的状态。 我试过了 def check_status(bit0 = False,bit2 = False,bit3=False): regvalue = read_register() if bit0: if regvalue & 0x01: return 1 else: return 0 elif bit2: if regvalue
def check_status(bit0 = False,bit2 = False,bit3=False):
regvalue = read_register()
if bit0:
if regvalue & 0x01:
return 1
else:
return 0
elif bit2:
if regvalue & 0x04:
return 1
else:
return 0
elif bit3:
if regvalue & 0x08:
return 1
else:
return 0
else:
raise
如何以有效的方式返回多个位的状态?
例如,如果要通过将比特0和比特3作为true传递来检查它们的状态,那么作为回报,如果两者都设置或它们的当前值,我应该得到1
var = 0b10100
mask = 0b10001
if not var^mask:
print "all bits match"
else:
print "match bits (0 if bits match, 1 otherwise)", "{0:b}".format(var ^ mask)
您可以用bit0/2/3变量创建一个位掩码,并对照该掩码检查寄存器
def check_status(bit0 = False,bit2 = False,bit3=False):
regvalue = read_register()
mask = (0, 0x1)[bit0]
mask = mask | (0, 0x4)[bit2]
mask = mask | (0, 0x8)[bit3]
return regvalue & mask != 0
如果至少设置了一个请求位,则返回true。
如果仅当设置了所有请求的位时才希望返回True,请执行以下操作
返回regvalue&mask==mask
这构造了一个掩码,其中,如果位0、位2和位3为真,则掩码=0xd;例如,如果位0为真,且位2/位3为假,则掩码为0x1
(如果您想知道
(0,0x4)[bit2]
语法)模块位数组
非常适合从各种输入构建位数组。下面是一个简单的例子:
from bitarray import bitarray
a1 = bitarray('101')
a2 = bitarray(True, False, True)
a3 = bitarray('100')
# Connecting arrays with & gives you an array in which all the bytes which are 1 in both arrays are 1 as well
a1 & a2 # bitarray('101')
a1 & a3 # bitarray('100')
# comparing this result with your original mask, will give you a True or False
a1 & a2 == a1 # True
a1 & a3 == a2 # False
有关更多信息,请参阅
关于函数,假设read\u register()
为bitarray()
返回一个有效的可转换值,我会这样做:
import bitarray from bitarray
def check_status(bit0 = False,bit2 = False,bit3=False):
regvalue = bitarray(read_register())
mask = bitarray([bit1, bit2, bit3]) # or even use the args parameter here
return regvalue & mask == mask
可能的副本:可能的副本