如何解决Lua奇数MIN整数
问题(在Lua 5.3和5.4上测试):
a = -9223372036854775807 - 1 ==> -9223372036854775808 (lua_integer)
b = -9223372036854775808 ==> -9.2233720368548e+018 (lua_number)
问题:
是否可以在不修改“ luaconf.h”或输入“ -9223372036854775807-1”的情况下获取“ -9223372036854775808”?
解决方法
当您在程序中编写b = -9223372036854775808
时,Lua解析器会将其视为“将负运算符应用于正整数常量”,但是正常量超出了整数范围,因此将其视为浮点,并且将负运算应用于浮点数,最终结果是浮点数。
有两种方法可以获取最小整数:
- 按位运算符将浮点数转换为整数(按位OR的优先级低于取反):
b = -9223372036854775808|0
- 使用
math
库中的特殊常量:
b = math.mininteger
PS
请注意,表达式b = -9223372036854775808|0
中的其他OR不会使您的程序变慢。实际上,所有计算(求和和)都是在编译时完成的,字节码仅包含您需要的最终常量:
$ luac53 -l -l -p -
b = -9223372036854775808|0
main <stdin:0,0> (2 instructions at 0x244f780)
0+ params,2 slots,1 upvalue,0 locals,2 constants,0 functions
1 [1] SETTABUP 0 -1 -2 ; _ENV "b" -9223372036854775808
2 [1] RETURN 0 1
constants (2) for 0x244f780:
1 "b"
2 -9223372036854775808
locals (0) for 0x244f780:
upvalues (1) for 0x244f780:
0 _ENV 1 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。