閑言碎語(yǔ)
這又是一篇簡(jiǎn)短的不能再短的文章,說的的bit模塊。由于lua沒有提供類似于C語(yǔ)音的位運(yùn)算符,如果想做一些位運(yùn)算,例如 i&0x08,就需要用到bit模塊了。
深呼吸,然后一口氣就可以看完了。
沒有模塊函數(shù)
模塊提供了12個(gè)函數(shù),對(duì)應(yīng)了12種位運(yùn)算。不羅列出來(lái)了。直接看例子。
實(shí)踐一下
- bit.arshift(value, shift),算術(shù)右移
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語(yǔ)言的 ~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]),對(duì)某個(gè)位置0
print(string.format("0x%02X", bit.clear(0xFF, 1, 2, 3)))
> 0xF1
- bit.isclear(value, position),判斷某個(gè)位是否為0
print(bit.isclear(0xFE, 0))
> true
- bit.isset(value, position),判斷某個(gè)位是否為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 ]),對(duì)某些位置1
print(string.format("0x%02X", bit.set(0x0, 0, 1, 2)))
> 0x07
因?yàn)閘ua不支持位運(yùn)算,所以只能用bit模塊提供的API。將就著用吧。
簡(jiǎn)書評(píng)論不能貼圖, 如有需要可以到我的GitHub上提issues