我试图理解这个使用二进制数的 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
为假,循环将不会执行第三次。
下面,我有一个我不确定我是否完全理解的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
为假,循环将不会执行第三次。