我是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()
的工作原理吗? 最佳答案
这是简单的位算术:get_relay_state()
确实将1
左移relay
个位置,然后用它掩盖data
。
因此,通常来说:它会检查relay
的位是否已设置。但是映射不是线性的。
例如:
if relay == "1":
return testBit(data, 1)
if relay == "3":
return testBit(data, 5)
第一个
if
检查继电器是否设置为1,如果设置为1,则返回2
(第二位)。第二个
if
检查继电器是否设置为3,如果是,则返回20
(第5位)。数组
relay_data
的值与函数get_relay_state()
的返回值一致。如果该位置1,则最终表达式
return(int_type & mask)
返回TRUE
,否则设置为FALSE
。