bit32
Full bit32 library: band, bor, bxor, bnot, lshift, rshift, arshift, lrotate, rrotate, extract, replace, btest, countlz, countrz, byteswap.
Syntax
bit32.band(...: integer) -> integer
bit32.bor(...: integer) -> integer
bit32.bxor(...: integer) -> integer
bit32.bnot(n: integer) -> integer
bit32.lshift(n: integer, count: integer) -> integer
bit32.rshift(n: integer, count: integer) -> integer
bit32.arshift(n: integer, count: integer) -> integer
bit32.lrotate(n: integer, count: integer) -> integer
bit32.rrotate(n: integer, count: integer) -> integer
bit32.extract(n: integer, field: integer, width?: integer) -> integer
bit32.replace(n: integer, value: integer, field: integer, width?: integer) -> integer
bit32.btest(...: integer) -> boolean
bit32.countlz(n: integer) -> integer
bit32.countrz(n: integer) -> integer
bit32.byteswap(n: integer) -> integer
Parameters
| Parameter | Type | Description |
|---|---|---|
n | integer | Operand, truncated to its low 32 bits. |
count | integer | Shift or rotate distance, taken modulo 32. |
field | integer | Zero-based bit index for extract and replace. |
width | integer | Bit width, defaulting to 1 and clipped so the field never crosses bit 31. |
Returns
| Type | Description |
|---|---|
integer | The result of the operation, or boolean for btest. |
Description
Every helper works on unsigned 32-bit values, so results never exceed 0xFFFFFFFF and bnot(0) is 0xFFFFFFFF.
band, bor and bxor are variadic; btest ANDs all arguments and returns true when the result is non-zero.
countlz and countrz return 32 for zero, and byteswap reverses the byte order of the 32-bit value.
Example
print(bit32.band(0xFF, 0x0F), bit32.lshift(1, 8))
print(bit32.btest(8, 12), bit32.countlz(1), bit32.countrz(8), bit32.byteswap(0x12345678))
print(bit32.extract(0xF0, 4, 4)) -- 15
Notes
- Arguments are truncated to 32 bits, so
bit32.band(0x1FFFFFFFF, 0xFFFFFFFF)is0xFFFFFFFF. lrotateandrrotatereturn the input unchanged for a distance of 0 or 32.arshiftkeeps the sign bit, whilershiftalways fills with zeros.- The table is a plain Lua library, not a service pumped by the tick loop.