Lua 中的数字类型长度是多少字节?

数字格式的长度是多少字节? 这是一种“多类型”数据格式。它是 4 字节?8 字节?多少?如何通过编程获取它?长度是否取决于操作系统/处理器类型?

这里https://www.lua.org/pil/2.3.html的文档中说这是双精度类型。也就是说,它有 64 位。我的理解是对的吗?

点赞
用户6154465
用户6154465

根据 Lua 参考手册(针对整数)

在整数算术溢出的情况下,所有操作环绕进行,根据二的补码算术的通常规则。 (换句话说,它们返回唯一的可表示整数,其等于数学结果模2 ^ 64。)

而对于浮点数

除了指数和浮点数除法之外,算术运算符的工作方式如下:如果两个操作数都是整数,则在整数上执行操作,结果为整数。否则,如果两个操作数都是可转换为数字的数字或字符串(参见§3.4.3),则它们转换为浮点数,在浮点数算术的通常规则下执行操作(通常是IEEE 754标准),结果是一个浮点数。

2016-05-04 10:47:12
用户1737
用户1737

这取决于 Lua 的版本,当然也取决于它的编译方式。

5.3 版本提供了真正的整数,通常为 64 位。https://www.lua.org/manual/5.3/manual.html

类型 number 使用两种内部表示或两种子类型,一种称为整数,另一种称为浮点数。

...

标准 Lua 使用 64 位整数和双精度(64 位)浮点数,但您也可以编译 Lua,使其使用 32 位整数和/或单精度(32 位)浮点数。

早期的版本始终使用 64 位双精度浮点数,可以有效地准确表示高达 52 位的整数。你的链接... https://www.lua.org/pil/2.3.html

2016-05-04 10:59:26
用户204011
用户204011

像 @Roddy 所说的那样,整数类型有点复杂。此外,它取决于你的 Lua 编译方式。

基本上,在 Lua 5.3 中,有两种类型,整数类型 lua_Integer 和数字类型 lua_Number。你可以通过 解析块头 在程序中获取它们的长度:

local chunk = string.dump(function() end)
print("lua_Integer", chunk:byte(16))
print("lua_Number", chunk:byte(17))

通常,这两个长度都是 8 个字节。然而,在某些嵌入式平台上,你可能会找到 lua_Number 类型为浮点数(4 字节)、32 位整数甚至更奇怪的东西的 Luas。

2016-05-04 16:41:33
用户199201
用户199201

Lua 作为一门语言并没有定义你所要求的内容。表示数字的数据类型可能会因版本而异(请注意,“Lua 程序设计(第一版)”在线版的链接是关于 Lua 5.0 的),但这主要是由 Lua 的编译方式定义的,正如其他人已经说过的那样。

请查看 luaconf.h 以获取所有细节。

关于你实际的问题(将十六进制字符串转换为数字),你可以查看 tonumber() 在各种输入字符串上的结果,与已知结果进行比较:

function hexConvertibeBytes()
    local i, s = 0, ''
    repeat
        i, s = i + 1, s .. 'FF'
        local n = tonumber( s, 16 )
    until n ~= 256^i - 1
    return i - 1
end
2016-05-10 15:58:47
用户5805351
用户5805351

我们可以使用 string.pack 如下:

s = string.pack("J",0)
number_of_bytes = #s
2021-06-11 19:48:36