Python 位操作
Python Bit Manipulation
我是 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()
是如何工作的?
这很简单bit-arithmetic:get_relay_state()
确实将1
向左移动relay
个位置,然后用它掩盖data
。
所以在普通话中:它检查 relay
的位是否已设置。但是映射不是线性的。
例如:
if relay == "1":
return testBit(data, 1)
if relay == "3":
return testBit(data, 5)
第一个 if
检查继电器是否设置为 1,如果设置为 returns 2
(第 2 位)。
第二个 if
检查继电器是否设置为 3,如果设置 returns 20
(第 5 位)。
数组 relay_data
的值与函数 get_relay_state()
的 return 值一致。
最终表达式 return(int_type & mask)
returns TRUE
如果该位已设置,FALSE
如果未设置。
我是 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()
是如何工作的?
这很简单bit-arithmetic:get_relay_state()
确实将1
向左移动relay
个位置,然后用它掩盖data
。
所以在普通话中:它检查 relay
的位是否已设置。但是映射不是线性的。
例如:
if relay == "1":
return testBit(data, 1)
if relay == "3":
return testBit(data, 5)
第一个 if
检查继电器是否设置为 1,如果设置为 returns 2
(第 2 位)。
第二个 if
检查继电器是否设置为 3,如果设置 returns 20
(第 5 位)。
数组 relay_data
的值与函数 get_relay_state()
的 return 值一致。
最终表达式 return(int_type & mask)
returns TRUE
如果该位已设置,FALSE
如果未设置。