gpt4 book ai didi

Python 位操作

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:51 26 4
gpt4 key购买 nike

我是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 位置,然后屏蔽数据 与它一起。

所以用通俗的话说:它检查继电器的位是否已设置。但映射不是线性的。

例如:

if relay == "1":
return testBit(data, 1)
if relay == "3":
return testBit(data, 5)

第一个 if 检查继电器是否设置为 1,如果设置则返回 2(第二位)。
第二个 if 检查继电器是否设置为 3,如果是,则返回 20(第 5 位)。

数组relay_data的值与函数get_relay_state()的返回值一致。

如果该位已设置,则最终表达式 return(int_type & mask) 返回 TRUE,如果未设置,则返回 FALSE

关于Python 位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com