This module provides bitwise operations for Lua scripts in Xmake.
::: tip TIP
To use this module, you need to import it first: import("core.base.bit")
:::
Although Lua 5.4+ natively supports bitwise operators, Xmake can be configured to use LuaJIT as the runtime. To ensure compatibility across different Lua versions, Xmake provides the bit module for more generic bitwise operations.
This module provides a common set of bitwise operations that work consistently regardless of whether you're using standard Lua or LuaJIT.
::: tip API
bit.band(a: <number>, b: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. First number |
| b | Required. Second number |
| Type | Description |
|---|---|
| number | Returns the bitwise AND result of a and b |
import("core.base.bit")
local result = bit.band(5, 3) -- Returns 1
::: tip API
bit.bor(a: <number>, b: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. First number |
| b | Required. Second number |
| Type | Description |
|---|---|
| number | Returns the bitwise OR result of a and b |
import("core.base.bit")
local result = bit.bor(5, 3) -- Returns 7
::: tip API
bit.bxor(a: <number>, b: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. First number |
| b | Required. Second number |
| Type | Description |
|---|---|
| number | Returns the bitwise XOR result of a and b |
import("core.base.bit")
local result = bit.bxor(5, 3) -- Returns 6
::: tip API
bit.bnot(a: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. Number to negate |
| Type | Description |
|---|---|
| number | Returns the bitwise NOT result of a |
import("core.base.bit")
local result = bit.bnot(5) -- Returns the bitwise NOT of 5
::: tip API
bit.lshift(a: <number>, b: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. Number to shift |
| b | Required. Number of bits to shift left |
| Type | Description |
|---|---|
| number | Returns a shifted left by b bits |
import("core.base.bit")
local result = bit.lshift(5, 2) -- Returns 20 (5 << 2)
::: tip API
bit.rshift(a: <number>, b: <number>)
:::
| Parameter | Description |
|---|---|
| a | Required. Number to shift |
| b | Required. Number of bits to shift right |
| Type | Description |
|---|---|
| number | Returns a shifted right by b bits |
import("core.base.bit")
local result = bit.rshift(20, 2) -- Returns 5 (20 >> 2)
::: tip API
bit.tobit(x: <number>)
:::
| Parameter | Description |
|---|---|
| x | Required. Number to convert |
| Type | Description |
|---|---|
| number | Returns x masked to 32-bit integer (0xffffffff) |
import("core.base.bit")
local result = bit.tobit(0x12345678) -- Returns value masked to 32 bits
::: tip API
bit.tohex(x: <number>, n?: <number>)
:::
| Parameter | Description |
|---|---|
| x | Required. Number to convert |
| n | Optional. Number of hexadecimal digits (default: 8). Use negative for uppercase |
| Type | Description |
|---|---|
| string | Returns hexadecimal string representation |
import("core.base.bit")
local hex = bit.tohex(255, 2) -- Returns "ff"
local hex = bit.tohex(255, -2) -- Returns "FF"
local hex = bit.tohex(255) -- Returns "000000ff"