下面,我有一个for循环,我不确定我完全理解。这就是我认为它应该如何运行:
首先看6,然后看6& 1(110和001)等于0,而不是1.因此它应该打印出6.它然后执行6>> 1,继续到3.对于3,011和001等于1所以它应该结束for循环。但是,当我运行for循环时,它根本不打印任何东西。我怎么想这个错误?
for (int i = 6; (i & 1) == 1; i >>= 1)
{
Console.WriteLine(i);
}
答案 0 :(得分:3)
我怎么想这个错误?
你有完全向后。循环条件必须 true 才能运行循环体,而不是 false ,如您所愿。
让我们更清晰。如果你有:
for (int i = initializer; condition ; increment)
body
与
相同{
int i = initializer;
while (condition)
{
body;
increment;
}
}
(好吧,几乎相同。在真正的while
循环中,continue;
中的body
会开始循环,但是在{{1} }} for
循环将转到上面代码中的continue
。)
您了解increment
循环就像while
,对吗? if
评估条件,如果为真,则控制传递给正文。 if(condition) body
就像while
一样,只是它继续执行if
语句直到条件为假,而不仅仅是{{1} }}
while
循环只是花哨的if
循环。如果条件为真,则输入正文。
在您的示例中,for
为false,因此永远不会输入循环体。如果您使用while
开始,则(6 & 1) == 1
将成立,正文将执行,然后int i = 11
将成为(11 & 1) == 1
。 i
为真,因此循环再次执行,5
变为(5 & 1) == 1
。由于i
为false,因此循环不会执行第三次。