You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有没有内置函数可以快速计算int类型整数所占的二进制位数?

int类型有效二进制位数快速计算方案

g++ 平台原生实现

你需要的功能可以直接用g++ 9.3.0支持的__builtin_clz系列内置函数实现,该函数用于统计无符号整数二进制表示的高位前导0的个数,计算逻辑为:总位数 - 前导0个数 = 有效二进制位数。

  • 32位无符号int:32 - __builtin_clz(非0值)
  • 64位无符号long long:64 - __builtin_clzll(非0值)

示例计算:10的二进制为1010,32位下前导0共28个,32-28=4,和你给出的count(10)=4完全匹配。

注意:__builtin_clz入参为0时属于未定义行为,如果你的输入可能包含0,需要单独判断返回对应默认值。

该函数会被直接编译为CPU原生指令(x86平台为lzcnt/bsr、ARM平台为clz),单周期即可完成计算,性能远高于移位法和log2计算法,完全满足高性能场景需求。

跨平台兼容实现

如果需要适配MSVC等其他编译器,且使用环境支持C++20及以上标准,可以直接用标准库提供的std::bit_width函数,该函数定义在<bit>头文件中,直接传入非0无符号整数即可得到有效二进制位数,语法更简洁,行为统一规范,编译器也会针对该函数做最高效的指令映射。

示例代码

// g++专用版本
#include <iostream>
inline int count(unsigned int v) {
    return v == 0 ? 0 : 32 - __builtin_clz(v);
}

// C++20跨平台版本(可选)
// #include <bit>
// inline int count(unsigned int v) {
//     return std::bit_width(v);
// }

int main() {
    std::cout << count(10) << std::endl;   // 输出4
    std::cout << count(7) << std::endl;    // 输出3
    std::cout << count(127) << std::endl;  // 输出7
    return 0;
}

内容的提问来源于stack exchange,提问作者xkcdjerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:15:04