在Java中,当我执行左移操作时,由于整数/长溢出,我得到负结果: 0xAAAAAAAA<< 7给了我-183251938048
但是,在Lua中,因为一切都是52位浮点数的Lua数;左转时我无法触发溢出: bit_lshift(0xAAAAAAAA,7)给了我1431655680
如何在Lua中模拟32位有符号整数?
答案 0 :(得分:1)
您编写了一些处理此问题的C函数,然后将它们导出到Lua。
虽然一般情况下,Lua代码不应该触及这个低级别的东西。
答案 1 :(得分:1)
你正在寻找在Lua中操作库的位。一个这样的库是来自LuaJIT作者的bitop
,它直接包含它而无需安装。您也可以在标准Lua中安装它。
另一个库是bit32
库,它包含在Lua 5.2中。
两个库都允许您操作32位数字。例如bitop
:
local bit = require 'bit
print(bit.lshift(0xAAAAAAAA, 7)) --> 1431655680
我不知道你是怎么得到负数的,因为1431655680就是我在C中所做的(0xAAAAAAAA<<<<<<<<<<<<<<<<<<<<<<"<">� 0FFFFFFFF)了。
答案 2 :(得分:1)
我希望我不会因为这样说而感到拖延,但从Lua模拟Java的最佳方法是使用Lua的Java。
如果您需要模拟Java,可能是您的Lua已经嵌入其中。只需将Java的二进制操作暴露给Lua程序,就可以使用它们。