是否有内置函数可以快速计算 int 占用的位数?

xkc*_*rry 0 c++ built-in

我想看看有多少位的int占用,例如count(10)=4count(7)=3count(127)=7
我曾尝试暴力破解(<<荷兰国际集团一1,直到它的严格的数量比大),并使用floor(log2(v))+1,但两者都太慢我的需要。
我知道有一个__builtin_popcnt函数可以快速计算1s 中有多少个s int,但是我很难找到适合我的应用程序的内置函数,是否没有这样的函数或者我忽略了什么?

编辑:我正在使用g++版本9.3.0
Edit2:mediocrevegetable1 的答案被选中,因为它是当时唯一可用的答案g++。但是,未来的读者也可以尝试 chris 的答案以获得更好的兼容性或希望编译器能够提供更高效的执行。

chr*_*ris 10

添加了 C++20 std::bit_width现场示例):

#include <bit>
#include <iostream>

int main() {
    std::cout 
      << std::bit_width(10u) << ' ' // 4
      << std::bit_width(7u) << ' ' // 3
      << std::bit_width(127u); // 7
}
Run Code Online (Sandbox Code Playgroud)

例如,使用 Clang trunk 和 ,-O3 -march=skylake一个只执行调用的函数bit_width会生成以下程序集:

count(unsigned int):
    lzcnt   ecx, edi
    mov     eax, 32
    sub     eax, ecx
    ret
Run Code Online (Sandbox Code Playgroud)

这个新<bit>标题中也有许多类似的功能。你可以在这里看到它们