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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容