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

数组内迭代时两种相似实现结果不同的技术疑问

问题根源:变量作用域导致的逻辑错误

嘿,这个问题其实是个很典型的变量作用域陷阱!咱们来拆解两段代码的核心差异:

正确版本的逻辑

这段代码里,循环变量i是在for循环头部声明的,它的作用域覆盖整个循环周期,每次迭代都会自动递增:

for (int i = 0; i < 32; i++) { 
    int cNumber = decNumb % 2; 
    binNum[32 - i] = cNumber; 
    decNumb = decNumb / 2; 
}

每次循环时,32 - i的值会从32(i=0)逐步递减到1(i=31),刚好把十进制数的每一位余数依次写入数组的对应位置,逻辑完全正确。

错误版本的问题所在

你引入的变量j是在for循环的内部声明的:

for(int i = 0; i < 32; i++) { 
    int j = 0; // 重点:每次循环都会重新初始化j为0!
    int cNumber = decNum % 2; 
    binNum[32-j] = cNumber; 
    decNumb = decNumb / 2; 
    j++; 
}

这里的关键问题是:每次进入循环体,j都会被重新赋值为0,哪怕你最后执行了j++,这个递增后的j值在当前循环结束后就被销毁了,下一次循环又会从头开始把j设为0。

换句话说,整个循环过程中,32-j的值永远是32,所有余数都被反复写入binNum[32]这个位置,后面的结果会覆盖前面的,最终数组里只有最后一次的余数是正确的,其他位置都是初始值,自然不符合预期。

修正方法

只需要把j的声明移到for循环外面,让它的作用域覆盖整个循环周期,就能和正确版本的逻辑一致:

int j = 0;
for(int i = 0; i < 32; i++) { 
    int cNumber = decNum % 2; 
    binNum[32-j] = cNumber; 
    decNumb = decNumb / 2; 
    j++; 
}

这样j会在每次循环中持续递增,32-j的变化和正确版本的32-i完全同步,结果就正常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:40:19