0

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

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

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

4

3 回答 3

1

你编写一些 C 函数来处理这个问题,然后将它们导出到 Lua。

虽然一般来说,Lua 代码不应该接触这么低级的东西。

于 2012-04-26T10:35:02.433 回答
1

我希望我不会因为这样说而被视为拖钓,但从 Lua 模拟 Java 的最佳方法是使用 Lua 中的 Java。

如果您需要模拟 Java,很可能您的 Lua 已经嵌入其中。只需将 Java 的二进制操作暴露给 Lua 程序,它就可以使用它们。

于 2012-04-27T06:56:07.627 回答
1

您正在寻找 Lua 中的位操作库。一个这样的库bitop来自 LuaJIT 的作者,它直接包含它而无需安装。您也可以在标准 Lua 中安装它。

另一个库是bit32库,它包含在 Lua 5.2 中。

这两个库都允许您操作 32 位数字。例如bitop

local bit = require 'bit
print(bit.lshift(0xAAAAAAAA, 7)) --> 1431655680

我不知道你是如何得到负数的,因为 1431655680 是我在 C 中通过 (0xAAAAAAAAA<<7)&0xFFFFFFFF 得到的(并且也在“编程计算器”中这样做)。

于 2012-04-26T13:41:45.153 回答