O(1)时间中的二进制对数(在寄存器x86或SIMD上操作),不移位



我想看看是否有一种方法可以找到数字的二进制对数。假设你有数字4,那么你加2得到4的幂是2。

我知道移位和计数是可能的,但这需要O(N)运算。对于x = 2^n所在的任何n,有没有办法得到O(1)

我想在这里找到n,知道一次操作中的xO(1)

正如您所指定的x86,听起来您想要BSR(位扫描反向)操作码,它报告最高有效集位的位置。

[FYI:big-O表示法是指渐近复杂度(即N->无穷大);如果N有一个有限极限(在这种情况下是32或64),那就没有多大意义了。]