闲言碎语
这又是一篇简短的不能再短的文章,说的的bit模块。由于lua没有提供类似于C语音的位运算符,如果想做一些位运算,例如 i&0x08
,就需要用到bit模块了。
深呼吸,然后一口气就可以看完了。
没有模块函数
模块提供了12个函数,对应了12种位运算。不罗列出来了。直接看例子。
实践一下
- bit.arshift(value, shift),算术右移
print(string.format("0x%02X", bit.arshift(0x04, 1)))
> 0x02
- bit.band(val1, val2 [, ... valn]),位与
print(string.format("0x%02X", bit.band(0x04, 0xFF)))
> 0x04
- bit.bit(position),类似于 1 << position
print(string.format("0x%02X", bit.bit(0)))
> 0x01
- bit.bnot(value),类似于C语言的 ~value
print(string.format("0x%02X", bit.bnot(3)))
> 0xFFFFFFFC
- bit.bor(val1, val2 [, ... valn]),位或
print(string.format("0x%02X", bit.bor(0x01, 0x02, 0x04)))
> 0x07
- bit.bxor(val1, val2 [, ... valn]),按位异或
print(string.format("0x%02X", bit.bxor(0x01, 0x02)))
> 0x03
- bit.clear(value, pos1 [, ... posn]),对某个位置0
print(string.format("0x%02X", bit.clear(0xFF, 1, 2, 3)))
> 0xF1
- bit.isclear(value, position),判断某个位是否为0
print(bit.isclear(0xFE, 0))
> true
- bit.isset(value, position),判断某个位是否为1
print(bit.isset(0xFE, 0))
> false
- bit.lshift(value, shift),左移
print(string.format("0x%02X", bit.lshift(0x80, 1)))
> 0x100
- bit.rshift(value, shift),逻辑右移
print(string.format("0x%02X", bit.rshift(0xF, 1)))
> 0x07
- bit.set(value, pos1 [, ... posn ]),对某些位置1
print(string.format("0x%02X", bit.set(0x0, 0, 1, 2)))
> 0x07
因为lua不支持位运算,所以只能用bit模块提供的API。将就着用吧。
评论不能贴图, 如有需要可以到我的GitHub上提issues