这个问题与 Python - 如何将数字分解为 2 的幂次方? 相似。实际上,这是相同的问题,但与使用 Python(或 Javascript、C++,因为它们也存在)不同,我想知道如何使用 Lua 完成此操作。我对 Python 有一些基本的了解,所以我首先尝试将上述网站中列出的代码翻译成 Lua,但没有成功。以下是原始代码和我的翻译:
Python
def myfunc(x):
powers = []
i = 1
while i <= x:
if i & x:
powers.append(i)
i <<= 1
return powers
Lua
function powerfind(n)
local powers = {}
i = 1
while i <= n do
if bit.band(i, n) then -- bitwise and check
table.insert(powers, i)
end
i = bit.shl(i, 1) -- bitwise shift to the left
end
return powers
end
很遗憾,我的版本锁定并且“内存耗尽”。这是在使用数字12
作为测试之后发生的。很有可能是我对Python的基础知识不足,无法正确地将代码从Python翻译成Lua,因此希望有人能提供新的视角并帮助我修复它。
bit.shl(n, 1)
有两个问题。思考一下这行代码应该做什么,以及它实际上做了什么。 - user2357112if bit.band(i, n)
看到一些有趣的东西。请注意,Python 认为 0 是假的。 - user2357112bit.shl(n,1)
改成了i = bit.shl(i, 1)
... 但是不确定该怎么处理if bit.band(i, n)
部分。 - Joshif bit.band(i, n) ~= 0
找到了答案... 目前看起来是有效的。谢谢! - Joshbit
不是标准的Lua库。也许你想要使用的是bit32
,这种情况下使用lshift
代替shl
。此外,在Lua 5.3中,您可以使用普通的位运算符&
和<<
。 - lhfbit32
缩短为bit
。我不认为它已经整合了5.3,但我会查一下。谢谢! - Josh