gpt4 book ai didi

lua - 比较Lua中的两个数字时计算位数的差异

转载 作者:行者123 更新时间:2023-12-04 15:59:54 24 4
gpt4 key购买 nike

我想比较两个数字以确定必须翻转多少位才能使它们相等。

例如,5 和 6 需要 2 位翻转。

我可以手动执行此操作,但我想编写一个 Lua 函数来为我执行此操作,例如:

function (a,b)
return hammingweight of a xor b
end

我只对八进制与八进制的比较感兴趣(嘿嘿),所以该函数将返回 0-3 的值。有没有比使用表格更好的高效/优雅的方法?

最佳答案

bit32 Lua 5.2 中引入的库使这个过程变得相当简单。

local bxor, band, rshift = bit32.bxor, bit32.band, bit32.rshift
local function ham(a, b)
a = bxor(a, b)
b = 0 -- Reuse b to count one bits.
while a > 0 do
b = b + band(a, 1)
a = rshift(a, 1)
end
return b
end

print(ham(5,6)) -- 2

但是,如果您只比较足够小范围内的数字,例如 07,您可以简单地预先计算并保存结果。

local bxor = bit32.bxor
local hamcache = {[0] = 0, 1, 1, 2, 1, 2, 2, 3}
local function ham(a, b)
return hamcache[bxor(a, b)]
end

关于lua - 比较Lua中的两个数字时计算位数的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com