关于二进制运算的for循环逻辑疑问:为何代码无输出?
你的for循环执行逻辑误区解析
嘿,我来帮你把这个问题掰明白~
首先你得搞清楚for循环的核心执行顺序,这就是你理解出错的关键:
- for循环的执行步骤是:先执行初始化语句 → 立刻判断条件表达式是否为真 → 只有条件为真时,才会进入循环体执行代码 → 循环体执行完后,再执行循环后的操作(比如你的
i >>=1)→ 回到条件判断,重复这个过程。
而你写的代码是:
for (int i = 6; (i & 1) == 1; i >>= 1) { Console.WriteLine(i); }
咱们一步步走一遍实际执行流程:
- 初始化
i=6 - 第一步就判断条件:
6 & 1的结果是0(二进制110 & 001 = 000),显然0 ==1不成立 - 因为条件不满足,循环直接终止,循环体里的
Console.WriteLine(i)一次都没执行,所以你看不到任何输出。
你的理解误区在于:误以为循环会先执行一次循环体,再判断条件——但那是do-while循环的逻辑!for循环是先判断条件,再决定要不要进入循环体的。
如果想要实现你预期的流程(输出6,然后i右移为3,此时因为3&1=1终止),你可以改成do-while循环,或者调整for循环的条件:
比如改成do-while:
int i = 6; do { Console.WriteLine(i); i >>= 1; } while ((i & 1) != 1);
这样会先执行一次循环体输出6,然后i变成3,再判断3&1 !=1是否成立(结果是false),循环终止,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Dave Washington
相关产品推荐
相关产品推荐

