Lua 5.3/5.4 中的 64 个无符号整数的行为与“Lua 中的编程”中的行为不同

问题描述 投票:0回答:1

我正在阅读《Lua 编程,第四版》,我被困在练习 13.1 上,因为 Lua 的行为似乎与书中不同。第 13.2 节关于无符号整数,指出:

> x = 13835058055282163712   -- 3ul << 62ul
> x                          --> -4611686018427387904

但是如果我在 Lua 5.4、Windows x64 或 Lua 5.3、WSL x64 中执行此操作,它们的行为都是这样的:

> x = 13835058055282163712
> x
1.3835058055282e+19
> math.type(x)
float

所以,我有两个问题:

  1. 为什么关于学习 Lua 5.3 的“书”中显示的示例与实际的 Lua 实现不匹配?这是由于后来对语言进行了一些更新吗?
  2. 有解决办法吗?如何以十进制写大的“无符号整数”,而不将它们转换为浮点数?
lua unsigned-integer
1个回答
0
投票

在本书撰写时(对应 Lua 版本 5.3.0),Lua 在读取长整数文字时有错误的行为:它环绕它们。
后来,在 Lua 5.3.x 中,此行为已得到纠正,变得更加用户友好。
就目前而言,当整数文字超出 int64 范围时,Lua 将其读取为浮点数以保留其数值。

© www.soinside.com 2019 - 2024. All rights reserved.