美文网首页nodemcuNodeMCU
18、nodeMCU学习笔记--bit模块

18、nodeMCU学习笔记--bit模块

作者: 谢mingmin | 来源:发表于2017-03-04 17:12 被阅读647次

    闲言碎语

    这又是一篇简短的不能再短的文章,说的的bit模块。由于lua没有提供类似于C语音的位运算符,如果想做一些位运算,例如 i&0x08,就需要用到bit模块了。

    深呼吸,然后一口气就可以看完了。

    没有模块函数

    模块提供了12个函数,对应了12种位运算。不罗列出来了。直接看例子。

    实践一下

    1. bit.arshift(value, shift),算术右移
    print(string.format("0x%02X", bit.arshift(0x04, 1)))
    > 0x02
    
    1. bit.band(val1, val2 [, ... valn]),位与
    print(string.format("0x%02X", bit.band(0x04, 0xFF)))
    > 0x04
    
    1. bit.bit(position),类似于 1 << position
    print(string.format("0x%02X", bit.bit(0)))
    > 0x01
    
    1. bit.bnot(value),类似于C语言的 ~value
    print(string.format("0x%02X", bit.bnot(3)))
    > 0xFFFFFFFC
    
    1. bit.bor(val1, val2 [, ... valn]),位或
    print(string.format("0x%02X", bit.bor(0x01, 0x02, 0x04)))
    > 0x07
    
    1. bit.bxor(val1, val2 [, ... valn]),按位异或
    print(string.format("0x%02X", bit.bxor(0x01, 0x02)))
    > 0x03
    
    1. bit.clear(value, pos1 [, ... posn]),对某个位置0
    print(string.format("0x%02X", bit.clear(0xFF, 1, 2, 3)))
    > 0xF1
    
    1. bit.isclear(value, position),判断某个位是否为0
    print(bit.isclear(0xFE, 0))
    > true
    
    1. bit.isset(value, position),判断某个位是否为1
    print(bit.isset(0xFE, 0))
    > false
    
    1. bit.lshift(value, shift),左移
    print(string.format("0x%02X", bit.lshift(0x80, 1)))
    > 0x100
    
    1. bit.rshift(value, shift),逻辑右移
    print(string.format("0x%02X", bit.rshift(0xF, 1)))
    > 0x07
    
    1. bit.set(value, pos1 [, ... posn ]),对某些位置1
    print(string.format("0x%02X", bit.set(0x0, 0, 1, 2)))
    > 0x07
    

    因为lua不支持位运算,所以只能用bit模块提供的API。将就着用吧。

    相关文章

      网友评论

      • Zszen:arshift和lshift都不能掉头轮训
      • 2eac9eb3b10a:你好,从你这学到很多,能讲讲http模块么?
        谢mingmin: @回车空格键 OK,我先了解一下
      • 6a94709ccc80:终于又更新了
        谢mingmin: @河边的 因为模块都快讲完了😂

      本文标题:18、nodeMCU学习笔记--bit模块

      本文链接:https://www.haomeiwen.com/subject/egljgttx.html