现在我已经使自己的funcs做按位和+但是然后我看到了位库并尝试使用它但是它没有按照我想象的方式工作,它返回一个大的十进制而不是二进制我的问题实际上是一些。
首先:如何使用bit32库对二进制数进行按位AND。
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
答案 0 :(得分:0)
我假设你的bitwise和/ not函数接受字符串参数。
数字可以用多种方式表示。 数字110101(基数为2)与53具有相同的值,基数为10。
当你说
时x=123
Lua将123转换为其二进制表示1111011,然后将其作为位存储在内存中。 当你说
print(x)
Lua进入记忆,抓取x,即1111011,然后将其转换为更易读的基础10表示,你会看到
123
您编写的按位函数对字符串执行位操作,这些字符串显示数字的二进制表示形式,如“1111011”。 bit32库对数字执行位操作,显示数字的十进制表示,如123。
在Lua中,“1001001”是一个字符串,但是如果对它执行了算术运算,它会将其视为基数为10的数字。所以当你这样做时
bit32.band("101","110")
bit32.band函数将其参数解释为一百一十一。
您必须先将二进制字符串转换为数字:
bit32.band(tonumber("101",2), tonumber("110",2))