我对python很陌生,我想把我的注意力集中在位操作上,特别是使用中继板。在我正在使用的代码中,我看到:
class relay_data(dict):
address = {
"1":"2",
"2":"8",
"3":"20",
"4":"80",
"5":"1",
"6":"4",
"7":"10",
"8":"40",
"all":"FF"
}
def testBit(int_type, offset):
mask = 1 << offset
return(int_type & mask)
def get_relay_state( data, relay ):
if relay == "1":
return testBit(data, 1)
if relay == "2":
return testBit(data, 3)
if relay == "3":
return testBit(data, 5)
if relay == "4":
return testBit(data, 7)
if relay == "5":
return testBit(data, 2)
if relay == "6":
return testBit(data, 4)
if relay == "7":
return testBit(data, 6)
if relay == "8":
return testBit(data, 8)有人能解释一下get_relay_state()是如何工作的吗?
发布于 2018-03-24 23:08:18
这是一个简单的位算法:get_relay_state()确实移动了relay位置所留下的1,然后用它掩盖data。
因此,在通用语言中:它检查是否设置了relay的位,但映射不是线性的。
例如:
if relay == "1":
return testBit(data, 1)
if relay == "3":
return testBit(data, 5)第一个if检查继电器是否设置为1,如果设置为1,则返回2 (第2位)。
第二个if检查中继是否设置为3,如果设置为3,则返回20 (第5位)。
数组relay_data的值与函数get_relay_state()的返回值一致。
如果设置了位,则最后一个表达式return(int_type & mask)返回TRUE,如果没有,则返回FALSE。
https://stackoverflow.com/questions/49470796
复制相似问题