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

闲言碎语

这又是一篇简短的不能再短的文章,说的的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。将就着用吧。

评论不能贴图, 如有需要可以到我的GitHub上提issues

你可能感兴趣的:(18、nodeMCU学习笔记--bit模块)