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 如果未设置。