2013-01-22 39 views

回答

1

我听说有一些处理器,获取整数的最高位是单个指令,但我不能命名哪些处理器。即使有这样的处理器,你也只能得到不是任意二进制数的整数的最高位,这在你的问题中似乎就是这种情况。

对于较长的位序列,我认为你没有比检查每一位更好的选择,而对于较短的序列,你可以预先计算最高位值(例如有一个数组存储所有数字的最高位)到32768),而不是简单地从该数组中获得一个值,以获得所有高达15位序列所需的答案。

+1

a)在x86汇编中,'bsr'指令将检测第一个设置位,从最重要的位开始。在POSIX中,'ffs()'和'fls()'很可能会翻译成这样的指令,或者,如果不存在,编译器将使用De Bruijn序列发出一个非天真的软件实现。 b)对于较长的位序列,可以连续对每个单词应用此操作,确保最后一个单词用零填充。 –