Lua 奇数 MIN 整数

Uy *_*ran 4 lua

问题(在 Lua 5.3 和 5.4 上测试):

a = -9223372036854775807 - 1 ==> -9223372036854775808  (lua_integer)
b = -9223372036854775808     ==> -9.2233720368548e+018 (lua_number)
Run Code Online (Sandbox Code Playgroud)

问题

是否可以在不修改“luaconf.h”或写入“-9223372036854775807 - 1”的情况下获得“-9223372036854775808”?

Ego*_*off 5

当你b = -9223372036854775808在你的程序中编写时,Lua解析器将其视为“对正整数常量应用否定运算符”,但正常量超出整数范围,因此将其视为浮点数,并对浮点数应用否定,最终结果是浮动的。

获得最小整数有两种解决方案:

  1. 按位运算符将浮点数转换为整数(按位 OR 的优先级低于否定):
b = -9223372036854775808|0
Run Code Online (Sandbox Code Playgroud)
  1. 使用math库中的特殊常量:
b = math.mininteger
Run Code Online (Sandbox Code Playgroud)

PS
请注意,表达式b = -9223372036854775808|0中的额外 OR不会使您的程序变慢。实际上,所有计算(否定和 OR)都是在编译时完成的,字节码仅包含您需要的最终常量:

b = -9223372036854775808|0
Run Code Online (Sandbox Code Playgroud)