C# I';我试图理解这个循环,即';他在处理二进制数

C# I';我试图理解这个循环,即';他在处理二进制数,c#,for-loop,binary,bitwise-operators,C#,For Loop,Binary,Bitwise Operators,下面,我有一个for循环,我不确定自己是否完全理解。这就是我认为它应该运行的方式: 首先看6,6&1(110&001)等于0,而不是1。所以它应该打印出来6。然后执行6>>1,接着执行3。011&001等于1,因此应该结束for循环。但是,当我运行for循环时,它根本不打印任何内容。我怎么会认为这是错误的 for (int i = 6; (i & 1) == 1; i >>= 1) { Console.WriteLine(i); } 我怎么会认为这是错误的 for

下面,我有一个for循环,我不确定自己是否完全理解。这就是我认为它应该运行的方式:

首先看6,6&1(110&001)等于0,而不是1。所以它应该打印出来6。然后执行6>>1,接着执行3。011&001等于1,因此应该结束for循环。但是,当我运行for循环时,它根本不打印任何内容。我怎么会认为这是错误的

for (int i = 6; (i & 1) == 1; i >>= 1)
{
    Console.WriteLine(i);
}
我怎么会认为这是错误的

for (int i = 6; (i & 1) == 1; i >>= 1)
{
    Console.WriteLine(i);
}
你把它完全倒过来了。循环条件必须为true才能运行循环体,而不是像您所相信的那样为false

让我们把它弄脆一点。如果您有:

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

{
  int i = initializer;
  while (condition)
  {
    body;
    increment;
  }
}
(好吧,几乎是一样的。在一个真正的
while
循环中,a
继续;
正文中
将开始循环,但在
for
循环中,
继续
将转到上面代码中的
增量
。)

您知道
while
循环就像
if
,对吗
if(condition)body
计算条件,如果为true,则控制传递给body。
while
if
类似,只是它会继续执行
while
语句,直到条件为false,而不是像
if
那样只执行一次

for
循环只是花哨的
循环。如果条件为真,则输入正文


在您的示例中,
(6&1)==1
为false,因此从不输入循环体。如果您从
int i=11
开始,则
(11&1)==1
为真,主体将执行,然后
i
将变为
5
(5&1)=1
为真,因此循环再次执行,
i
变为
2
。因为
(2&1)==1
是错误的,所以循环不会第三次执行。

我想了解人们是如何对编程语言产生错误信念的。你能描述一下你是如何错误地认为一个
for
循环条件必须是假的才能运行身体的吗?老实说,你的猜测和我的一样好。据我所知,我从未有过这样的误解。有可能我看到了==并立即开始寻找它等于1的时间。你的问题是“我怎么会认为这是错误的?”你声称相信循环是在条件为真时进入的,并且声称相信
(6&1)==1
是假的,你声称相信
(6&1)==1
是循环条件,所以我想我不能诚实地告诉你你的想法哪里出错了。很明显是这样,但是如果你不能说更多关于你的思考过程是什么,我想没有人能告诉你哪里出了问题。正确。出于某种原因,当条件不是(i<100)或类似性质时,逻辑就离开了我。但你已经为我澄清了一切,所以谢谢你。