Lua位操作库

现在我已经编写了自己的函数来执行按位与+非运算,但后来我看到了 bit 库并尝试使用它,但它并不像我想象的那样工作,它返回的是一个大的十进制数,而不是二进制位,所以我的问题实际上有几个。

第一点:如何使用 bit32 库对二进制数执行按位与。

10110111 
11000100 = 10000100

第二点:如何使用 bit32 库以二进制格式添加网络地址和通配掩码来计算 ipv4 广播地址。

192.168.1.0 + 31 = 192.168.1.31

11000000.10100000.00000001.00000000
00000000.00000000.00000000.00011111 = 11000000.10100000.00000001.00011111
点赞
用户3159048
用户3159048

我假设您的位与/非函数采用字符串参数。

数字可以有多种表示方式。2进制中的数字110101和10进制中的数字53具有相同的值。

当您输入以下内容时:

x=123

Lua将123转换为它的二进制表示形式1111011,并将其存储为位数。 当您输入

print(x)

Lua进入内存,抓取1111011的x,然后将其转换为更具人类可读性的10进制表示形式,您会看到

123

您编写的位运算函数对显示数字的二进制表示的字符串执行位运算,例如“1111011”。 bit32库对显示数字的十进制表示,例如123执行位运算。

在Lua中,“1001001”是字符串,但如果对它执行算术运算,则将其视为以10进制书写的数字。 因此,当您执行以下操作时,

bit32.band("101","110")

bit32.band函数将其参数解释为一百零一和一百一十。

您必须先将二进制字符串转换为数字:

bit32.band(tonumber("101",2), tonumber("110",2))
2015-05-26 21:37:55