bit32.band类似于64位的操作

时间:2017-04-29 20:22:47

标签: lua

我想在Lua 5.1中以64位应用按位AND运算。它有算法吗? (我不知道该怎么做。)

注意:我只需要总共操作48位,而且我没有遇到问题。

在游戏的Lua我正在编写脚本,只有bit32库。

2 个答案:

答案 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