[英]Binary logarithm in O(1) time (operating on registers x86 or SIMD) without shifting?
我想看看是否有找到数字二进制日志的方法。 假设您有数字4,那么您将2乘以4的乘方就是2。
我知道这可以通过移位和计数实现,但是使用O(N)
运算。 对于x = 2^n
任何n
,是否有某种方法可以获取O(1)
?
我想在一个操作中知道x
或O(1)
来找到n
。
正如您指定的x86一样,听起来像您想要BSR
(反向位扫描)操作码,该操作码报告最高有效置位的位置。
[ 仅供参考:big-O符号表示渐近复杂度(即N->无穷大); 如果N有一个有限的限制(在这种情况下为32或64)并没有多大意义。 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.