Yuari
Documentation

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

ParameterTypeDescription
nintegerOperand, truncated to its low 32 bits.
countintegerShift or rotate distance, taken modulo 32.
fieldintegerZero-based bit index for extract and replace.
widthintegerBit width, defaulting to 1 and clipped so the field never crosses bit 31.

Returns

TypeDescription
integerThe 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) is 0xFFFFFFFF.
  • lrotate and rrotate return the input unchanged for a distance of 0 or 32.
  • arshift keeps the sign bit, while rshift always fills with zeros.
  • The table is a plain Lua library, not a service pumped by the tick loop.