在C中的整数中找到最高设置位(msb)的最快/最有效的方法是什么?

如果我有一个整数n,并且我想知道最高有效位的位置(也就是说,如果最低有效位在右边,我想知道最左边的位的位置是1)什么是最快/最有效的方法找出?

我知道POSIX支持一个ffs()方法在strings.h中找到第一个设置位,但似乎没有一个相应的fls()方法。

有没有一些真正明显的方式这样做,我错过了?

在你不能使用POSIX函数的可移植性的情况下呢?

编辑:什么解决方案工作在32位和64位体系结构(许多代码清单看起来像他们只工作在32位int)。

GCC has

 -- Built-in Function: int __builtin_clz (unsigned int x)
     Returns the number of leading 0-bits in X, starting at the most
     significant bit position.  If X is 0, the result is undefined.

 -- Built-in Function: int __builtin_clzl (unsigned long)
     Similar to `__builtin_clz', except the argument type is `unsigned
     long'.

 -- Built-in Function: int __builtin_clzll (unsigned long long)
     Similar to `__builtin_clz', except the argument type is `unsigned
     long long'.

我期望他们被翻译成对于当前平台相当有效的东西,无论它是那些花哨的比特复杂算法之一,或单个指令。

http://stackoverflow.com/questions/671815/what-is-the-fastest-most-efficient-way-to-find-the-highest-set-bit-msb-in-an-i

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在C中的整数中找到最高设置位(msb)的最快/最有效的方法是什么?