Lua位库

Lua位库,lua,bit,Lua,Bit,现在我已经做了我自己的函数来做按位和+不,但是后来我看到了位库并尝试使用它,但它没有像我想象的那样工作,它返回一个大的十进制而不是二进制位,所以我的问题实际上是几个 第一:如何使用bit32库对二进制数进行按位和 10110111 11000100 = 10000100 第二:如何通过使用bit32库以二进制形式添加网络地址和通配符掩码来计算ipv4广播地址 192.168.1.0 + 31 = 192.168.1.31 11000000.10100000.00000001.00000000

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

第一:如何使用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

我假设您的按位and/not函数采用字符串参数

数字可以用多种方式表示。 基数为2的数字110101的值与基数为10的数字53的值相同

当你说

x=123
print(x)
Lua将123转换为二进制表示形式1111011,然后将其作为位存储在内存中。 当你说

x=123
print(x)
Lua进入内存,抓取x,即1111011,然后将其转换为更易于阅读的Base10表示,您可以看到

123
您编写的按位函数对字符串执行位操作,这些字符串显示数字的二进制表示形式,如1111011。bit32库对数字执行位操作,这些数字显示像123这样的数字的十进制表示形式

在Lua中,1001001是一个字符串,但如果对其执行算术运算,它会将其视为以10为基数编写的数字。所以当你这么做的时候

bit32.band("101","110")
bit32.band函数将其参数解释为壹佰壹拾

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

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

实际上不,我的函数使用数字,只以字符串开头,然后使用tonumberdec,2将其转换为二进制,尽管这仍然不能回答我的问题。您没有代码示例,因此我们无法理解您的问题所在。添加一个代码示例。