我如何在lua中模拟带符号的32位整数

时间:2012-04-26 09:57:59

标签: lua bitwise-operators

在Java中,当我执行左移操作时,由于整数/长溢出,我得到负结果: 0xAAAAAAAA<< 7给了我-183251938048

但是,在Lua中,因为一切都是52位浮点数的Lua数;左转时我无法触发溢出: bit_lshift(0xAAAAAAAA,7)给了我1431655680

如何在Lua中模拟32位有符号整数?

3 个答案:

答案 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程序,就可以使用它们。