我试图理解这个用于处理二进制数的循环

时间:2018-03-26 22:34:42

标签: c# for-loop binary bitwise-operators

下面,我有一个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);
}

1 个答案:

答案 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) == 1i为真,因此循环再次执行,5变为(5 & 1) == 1。由于i为false,因此循环不会执行第三次。