首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python位操作

Python位操作
EN

Stack Overflow用户
提问于 2018-03-24 22:54:58
回答 1查看 146关注 0票数 1

我对python很陌生,我想把我的注意力集中在位操作上,特别是使用中继板。在我正在使用的代码中,我看到:

代码语言:javascript
复制
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()是如何工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-24 23:08:18

这是一个简单的位算法:get_relay_state()确实移动了relay位置所留下的1,然后用它掩盖data

因此,在通用语言中:它检查是否设置了relay的位,但映射不是线性的。

例如:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49470796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档