Bitwise operations

bit.tobit(x)

将数字规范化为位操作的数字范围并返回它。 通常不需要此函数,因为所有位操作都已经规范化了它们的所有输入参数。

参数

x number number to normalize

返回值

y number normalized number

例子

print(0xffffffff) --> 4294967295 (*)
print(bit.tobit(0xffffffff)) --> -1
printx(bit.tobit(0xffffffff)) --> 0xffffffff
print(bit.tobit(0xffffffff + 1)) --> 0
print(bit.tobit(2^40 + 1234)) --> 1234



bit.tohex(x,n)

将其第一个参数转换为十六进制字符串。 十六进制数字的数量由可选的第二个参数的绝对值给出。 1 到 8 之间的正数生成小写的十六进制数字。 负数生成大写的十六进制数字。 只有最不重要的 4*|n| 位被使用。 默认是生成 8 个小写的十六进制数字。

参数

x number number to convert
n number number of hex digits to return

返回值

s string hexadecimal string

例子

print(bit.tohex(1)) --> 00000001
print(bit.tohex(-1)) --> ffffffff
print(bit.tohex(0xffffffff)) --> ffffffff
print(bit.tohex(-1, -8)) --> FFFFFFFF
print(bit.tohex(0x21, 4)) --> 0021
print(bit.tohex(0x87654321, 4)) --> 4321



bit.bnot(x)

返回其参数的按位非。

参数

x number number

返回值

y number bitwise not of number x

例子

print(bit.bnot(0)) --> -1
printx(bit.bnot(0)) --> 0xffffffff
print(bit.bnot(-1)) --> 0
print(bit.bnot(0xffffffff)) --> 0
printx(bit.bnot(0x12345678)) --> 0xedcba987



bit.bor(x1,[x2…])

返回其所有参数的按位或。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise or of the provided arguments
例子

print(bit.bor(1, 2, 4, 8)) --> 15



bit.band(x1,[x2…])

返回其所有参数的按位和。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise and of the provided arguments

例子

printx(bit.band(0x12345678, 0xff)) --> 0x00000078



bit.bxor(x1,[x2…])

返回其所有参数的按位异或。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise xor of the provided arguments

例子

printx(bit.bxor(0xa5a5f0f0, 0xaa55ff00)) --> 0x0ff00ff0



bit.lshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位逻辑左移。 逻辑移位将第一个参数视为无符号数并移位 0 位。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

参数

x number number
n number number of bits

返回值

y number bitwise logical left-shifted number

例子

print(bit.lshift(1, 0)) --> 1
print(bit.lshift(1, 8)) --> 256
print(bit.lshift(1, 40)) --> 256
printx(bit.lshift(0x87654321, 12)) --> 0x54321000



bit.rshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位逻辑右移。 逻辑移位将第一个参数视为无符号数并移位 0 位。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise logical right-shifted number

例子

print(bit.rshift(256, 8)) --> 1
print(bit.rshift(-256, 8)) --> 16777215
printx(bit.rshift(0x87654321, 12)) --> 0x00087654



bit.arshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位算术右移。 算术右移将最高有效位视为符号位并复制它。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise arithmetic right-shifted number

例子

print(bit.arshift(256, 8)) --> 1
print(bit.arshift(-256, 8)) --> -1
printx(bit.arshift(0x87654321, 12)) --> 0xfff87654



bit.rol(x,n)

按第二个参数给定的位数返回其第一个参数的按位左旋转。 从一侧移出的位在另一侧移回。 仅使用循环计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits
返回值

y number bitwise left-rotated number

例子

printx(bit.rol(0x12345678, 12)) --> 0x45678123



bit.ror(x,n)

按第二个参数给定的位数返回其第一个参数的按位右旋。 从一侧移出的位在另一侧移回。 仅使用循环计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise right-rotated number

例子

printx(bit.ror(0x12345678, 12)) --> 0x67812345



bit.bswap(x)

交换其参数的字节并返回它。 这可用于将小端 32 位数字转换为大端 32 位数字,反之亦然。

例子

x number number

返回值

y number bitwise swapped number

例子

printx(bit.bswap(0x12345678)) --> 0x78563412
printx(bit.bswap(0x78563412)) --> 0x12345678