我想在Lua 5.1中以64位应用按位AND运算。它有算法吗? (我不知道该怎么做。)
注意:我只需要总共操作48位,而且我没有遇到问题。
在游戏的Lua我正在编写脚本,只有bit32
库。
答案 0 :(得分:2)
Lua默认在内部使用双浮点数。尾数只有52位,因此您无法安全地存储64位整数,而无需获得无效的浮点值。
32位,非常安全。 Lua 5.2手册描述了bit32 lib中带有数字的内容:
除非另有说明,否则所有函数都接受数字参数 范围(-2 ^ 51,+ 2 ^ 51);每个参数都标准化为其余数 除以2 ^ 32并截断为整数(以某种未指定的方式), 所以它的最终值落在[0,2 ^ 32 - 1]的范围内。同样,所有 结果在[0,2 ^ 32 - 1]范围内。
你必须使用32位块。
或者可能引入你自己的64位类型,可能是用userdata托管,并为该类型定义64位操作。
答案 1 :(得分:2)
local function band48 (x, y)
local xl = x % 4294967296
local yl = y % 4294967296
local xh = (x - xl) / 4294967296
local yh = (y - yl) / 4294967296
return bit32.band(xh, yh) * 4294967296 + bit32.band(xl, yl)
end
print(band48(7 * 2^33 + 3, 5*2^33 + 5)) --> 5*2^33+1 = 42949672961