问题(在 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”?
当你b = -9223372036854775808在你的程序中编写时,Lua解析器将其视为“对正整数常量应用否定运算符”,但正常量超出整数范围,因此将其视为浮点数,并对浮点数应用否定,最终结果是浮动的。
获得最小整数有两种解决方案:
b = -9223372036854775808|0
Run Code Online (Sandbox Code Playgroud)
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)