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

如何在lua中模拟有符号32位整数,lua,bitwise-operators,Lua,Bitwise Operators,在Java中,当我执行以下左移位操作时,由于整数/长溢出,我得到一个负结果: 0xaaaa您可以编写一些C函数来处理这个问题,然后将它们导出到Lua 尽管通常情况下,Lua代码不应该触及如此低级的内容。您可以编写一些C函数来处理这个问题,然后将它们导出到Lua 尽管通常情况下,Lua代码不应该触及如此低级的内容。您正在寻找Lua中的位操作库。一个这样的库来自LuaJIT的作者,它直接包含它而无需安装。您也可以在标准Lua中安装它 另一个库是lua5.2中包含的库 这两个库都允许您操作32位数字。

在Java中,当我执行以下左移位操作时,由于整数/长溢出,我得到一个负结果:
0xaaaa您可以编写一些C函数来处理这个问题,然后将它们导出到Lua


尽管通常情况下,Lua代码不应该触及如此低级的内容。

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


尽管通常情况下,Lua代码不应该触及如此低级的内容。

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

另一个库是lua5.2中包含的库

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

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

我不知道你是如何得到负数的,因为1431655680是我通过做得到的(0xAAAAAAAA你正在寻找Lua中的位操作库。其中一个库来自LuaJIT的作者,它直接包含它而无需安装。你也可以在标准Lua中安装它

另一个库是lua5.2中包含的库

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

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

我不知道你是怎么得到这个负数的,因为1431655680是我从中得到的(0xAAAAAAAA我希望我说这句话不会被视为是自讨苦吃,但从Lua模拟Java的最好方法是从Lua使用Java


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

我希望这样说不会让人觉得我是在吹毛求疵,但从Lua模拟Java的最好方法是从Lua使用Java


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

我在Lua环境中工作。控制有限,无法使用外部C库。我正在寻找纯Lua实现。@rohit:那么您必须自己编写它。在g中像这样的低级概念的一般的、纯Lua实现是不存在的。当然,如果你真的写了它,那么就共享它;然后会有一个纯Lua实现…:](纯Lua Worklike bit32库在这种情况下会很有用)我在Lua env中工作。由于中的控制有限,我无法使用外部C库。我正在寻找一个纯Lua实现。@rohit:那么你必须自己编写它。一般来说,像这样的低级概念的纯Lua实现是不存在的。当然,如果你编写它,请共享它;然后会有一个纯Lua实现tion…:](对于这种情况,纯Lua Worklike bit32库会有点有用)你的移位运算给你一个正数,因为你处理的是无符号整数。他特别想要有符号整数的某些行为。为什么,我不知道;一般来说,人们试图避免对有符号整数进行位移位。这很奇怪,因为它特别声明“所有运算都基于32位整数”和“所有位运算都被定义为返回有符号32位数字范围内的结果”,这也可能是因为他正在将其与Java进行比较,Java可能有关于移位有符号整数如何工作的时髦、非C规则。我猜(确实奇怪)Java结果的产生是因为它(1)将输入
0xaaaa
解释为有符号32位整数,但(2)输入的64位符号扩展版本的实际移位…:令人困惑的是,不同的Lua位库使用不同的约定…旧的Lua位库在转换回数字时似乎对结果进行符号扩展,但
bit32
使所有内容都无符号(这对我来说似乎更合理)。您的移位操作会给您一个正数,因为您处理的是无符号整数。他特别想要有符号整数的某些行为。为什么,我不知道;一般来说,人们会尝试避免对有符号整数进行位移位。这很奇怪,因为该操作特别声明“所有操作都基于32位整数”和所有位运算都被定义为返回有符号32位数字范围内的结果”这也可能是因为他正在将其与Java进行比较,Java可能有关于移位有符号整数如何工作的时髦、非C规则。我猜(确实奇怪)Java结果的产生是因为它(1)将输入
0xaaaa
解释为有符号32位整数,但(2)输入的64位符号扩展版本上的实际移位…:令人困惑的是,不同的Lua位库使用不同的约定…旧的Lua位库似乎在转换回数字时对结果进行符号扩展,但
bit32
使所有内容都不带符号(这对我来说似乎更合理)。