【发布时间】:2022-04-16 14:52:29
【问题描述】:
也许您可以帮助我解决以下问题,以帮助我加快我正在考虑的内存管理器(我不确定是否存在解决方案 - 我没有找到)。
我有一个 32 位的寄存器,我需要找出其中是否有 n 个连续的设置位,如果有,它们的偏移量是多少。例如,如果寄存器保存以下值 111100000000000000000001111111000 并且 n 等于 4 - 接受以下任何答案(偏移量从 0 开始):
3、4、5、6、28
我拥有的原子操作都是常规的按位操作(&、|、~、...),并且还找到了最低有效位偏移量(上面寄存器中的 3)。该算法(假设存在一个)——应该不超过 5 个原子操作。
【问题讨论】:
-
制作一个设置了最后一个
n位的掩码,然后将其移位并匹配。容易。 -
@daa - 直到最近我才知道如何接受答案。我只尝试了循环,但没有它不知道怎么做。
-
@Qnan - 远远超过 5 次操作.. 最好循环
-
我知道一种更好的方法,它只查看 1 的运行,但它仍然超过 5 次操作,并且当位在 0 和 1 之间交替时,它的行为非常糟糕。
-
这不是作业,我可以做一个简单的循环并找到所需的偏移量。但我真的不知道它是否可以在 O(1) 内完成
标签: algorithm bit-manipulation