我试图理解这个使用二进制数的 for 循环

I'm trying to understand this for loop that's working with binary numbers

下面,我有一个我不确定我是否完全理解的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);
}

How am I thinking about this wrong?

正好倒过来。循环条件必须 true 才能使循环体变为 运行,而不是 false,如您所想。

让我们让它更清晰。如果你有:

for (int i = initializer; condition ; increment)
  body

相同
{
  int i = initializer;
  while (condition)
  {
    body;
    increment;
  }
}

(嗯,几乎相同。在真正的 while 循环中,body 中的 continue; 会重新开始循环,但是在 for 循环中,continue 将转到上面代码中的 increment。)

您了解 while 循环就像 if,对吗? if(condition) body 评估条件,如果为真,则控制权传递给正文。 while 就像 if 一样,除了它会继续执行 while 语句 直到条件为假 ,而不是一次,就像if.

for 循环只是奇特的 while 循环。如果条件为真,则输入正文。

在您的示例中,(6 & 1) == 1 为假,因此永远不会进入循环体。如果您从 int i = 11 开始,那么 (11 & 1) == 1 将为真,主体将执行,然后 i 将变为 5(5 & 1) == 1为真,所以循环再次执行,i变为2。由于 (2 & 1) == 1 为假,循环将不会执行第三次。