【发布时间】:2012-01-04 15:11:58
【问题描述】:
我有一个 int 参数,可能的值为 1,2,4,8,16,32,64。
我需要知道当前值的位偏移量,即每个值分别返回 1、2、3、4、5 或 6。
实现这一目标的最简单方法是什么?
【问题讨论】:
-
你的意思是 2 的幂(6 不是 1)吗?在这种情况下,“位偏移”将以 2 为底数?
-
是的,请澄清。最好的问候,
-
天真的方法是循环和测试,但可能有一条本机 CPU 指令在一条指令中执行此操作。 (“获取最低(或最高)有效位”)
-
抱歉,6 不应该在那里,我知道使用以下方法解决这个问题:log((double)val) / log(2.0);但我认为这不是正确的方法
-
MSVC: _BitScanForward GCC: __builtin_ctz (最简单,因为你实际上不需要编写任何代码,只需调用一个已经存在的函数)
标签: c++ bit-manipulation offset