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

如何获取十进制数的第n位二进制位?求C++高效实现方案

获取十进制数的第n位二进制位(C++实现)

你的思路完全可行且高效

你的思路是对的,位与(bitwise &)运算是获取指定二进制位最直接高效的方式——位运算属于CPU原生指令,几乎没有额外开销,比算术运算或循环判断的执行速度快得多。

如何生成仅目标位为1的掩码数

要生成仅第n位为1的数(俗称"掩码"),只需将1左移n位即可,对应的C++代码为:1 << n。需要注意以下细节:

  • 若处理32位整数,1默认是int类型(通常为32位),当n超过31时会触发未定义行为;
  • 若处理64位整数,建议用1LL << n(LL表示长整型)或明确指定无符号类型,比如static_cast<uint64_t>(1) << n,避免溢出问题。

完整代码实现

下面是一个可直接使用的函数,输入十进制数和目标位n,返回该位的值(0或1):

#include <cstdint> // 用于固定宽度整数类型,如uint32_t、uint64_t

// 获取num的第n位二进制位(从末尾开始计数,起始为0)
int getNthBit(uint64_t num, int n) {
    // 生成掩码:仅第n位为1
    uint64_t mask = static_cast<uint64_t>(1) << n;
    // 位与运算,结果非0则该位为1,否则为0
    return (num & mask) != 0 ? 1 : 0;
}

测试示例

对应你给出的例子:

  • 对于十进制7(二进制111),调用getNthBit(7, 0),掩码为1<<0=1(二进制001),7 & 1 = 1,返回1;
  • 对于十进制9(二进制1001),调用getNthBit(9, 2),掩码为1<<2=4(二进制100),9 & 4 = 0,返回0。

注意事项

  • 如果n的取值超过当前整数类型的位数(比如给uint32_t传n=32),左移操作会触发未定义行为,建议在函数中添加边界判断,比如if (n >= 64) return 0;(针对uint64_t);
  • 使用无符号整数类型可避免符号位带来的意外问题,比如负数的二进制补码处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:17