lua基础之位操作

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值