什么是Lua数字类型长度(以字节为单位)?

什么是Lua数字类型长度(以字节为单位)?,lua,Lua,数字格式的字节长度是多少? 这是一种“多类型”数据格式。是4字节吗?8字节?多少钱?如何以编程方式获取它?长度是否取决于操作系统/处理器类型 这里的文档说明这是一种双精度类型。也就是说,它有64位。我说得对吗?根据Lua参考(对于整数) 在整数运算中出现溢出的情况下,所有运算都会根据两个补码运算的常规规则进行换行。(换句话说,它们返回的唯一可表示整数等于数学结果的模2^64。) 而对于浮点 除了求幂和浮点除法之外,算术运算符的工作方式如下:如果两个操作数都是整数,则对整数执行运算,结果是整数。否

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


这里的文档说明这是一种双精度类型。也就是说,它有64位。我说得对吗?

根据Lua参考(对于整数)

在整数运算中出现溢出的情况下,所有运算都会根据两个补码运算的常规规则进行换行。(换句话说,它们返回的唯一可表示整数等于数学结果的模2^64。)

而对于浮点

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


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

5.3具有真整数,通常为64位

类型编号使用两个内部表示或两个子类型, 一个称为整数,另一个称为浮点

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


早期版本总是使用64位双精度浮点,它可以有效地精确表示多达52位整数。你的链接

就像@Roddy说的,整数类型有点复杂。此外,这取决于Lua的编译方式

基本上,在Lua5.3中,有两种类型,整数类型
Lua_integer
和数字类型
Lua_number
。您可以通过以下方式从Lua中以编程方式获取其长度:


通常两个长度都是8字节。但是,在一些嵌入式平台上,您可以找到lua_数字类型为浮点(4字节)、32位整数甚至更奇怪的东西的lua。

lua作为一种语言并不能定义您的要求。用于表示数字的数据类型可能因版本而异(请注意,“Lua编程”的免费在线版本的链接是关于Lua 5.0的),但这主要是由Lua的编译方式定义的,其他人已经说过

看看所有的细节

关于实际问题(将十六进制字符串转换为数字),您可以查看不同输入字符串上的
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

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

s = string.pack("J",0)
number_of_bytes = #s

这有关系吗?你真正的问题是什么?你想用Lua还是C语言来表达?我想把十六进制字符串转换成数字。我想知道字符串的最大长度。@Vyacheslav所以实际上,要学究,您需要的是以位为单位的整数精度,而不是以字节为单位的数字类型的大小。:)@Vyacheslav那么你应该问这个问题,或者问另一个问题。它实际上有一个不同的答案。使用53位整数是安全的。请注意,这只适用于PUC rio lua。例如,它不起作用。luajit@daurnimator是的,而且区块头格式取决于Lua的版本,所以这只适用于5.3。如果需要支持更多Luas,则需要首先检查版本并为每个Luas实现特定的代码。获取本机整数宽度的更简单方法是
(“%x”):format(0xFFFFFFFFFFFF)
-乘以4获得位宽度,或者除以2获得字节宽度。如果出于任何原因,希望检查整数大于64位的Lua实现,甚至可以扩展
ff
s的数量。
s = string.pack("J",0)
number_of_bytes = #s