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

C++二进制数移位需求:简化指定累加循环代码实现

二进制连续1的生成方法

要从数字1(二进制00000001)得到00001111这类连续全1的二进制数,直接用位运算即可实现:

  • 核心公式:(1 << n) - 1,其中n是你需要的连续1的位数
  • 对应你的需求:想要得到4位连续1(00001111),代入n=4计算得(1 << 4) - 1 = 15,二进制正好是00001111
  • 代码示例:
    int target = (1 << 4) - 1; // 结果为15,二进制00001111
    

原理:1 << n会生成仅第n位为1的二进制数(比如1<<4是10000),减1后该位变为0,同时所有低位自动变为1(10000-1=01111),刚好得到n位连续的1。

循环代码简化

你提供的循环:

for(int i=1;h>0;h--,i*=2) hr+=i;

这段代码本质是计算**2^0 + 2^1 + ... + 2^(h-1)**的和并累加到hr中,而这个求和结果等价于2^h - 1,因此可以直接简化为一行位运算代码:

hr += (1 << h) - 1;

既去掉了循环提升效率,也大幅简化了代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:01:20