for循环中没有条件?

时间:2016-12-24 12:33:04

标签: c++

(提前抱歉,这个问题可能非常简单。我把代码写成一个爱好,而我现在正试着把想法包围起来。)

我最近遇到一个循环语句,如(n是先前设置的正整数):

int cnt;
for(cnt=0; n; cnt++){
    n &= n - 1;
}

如果我理解正确,循环中的中间条目应该是条件,但n;似乎根本不是条件。除非它被理解为bool(true if n!=0false if n==0)。如果这是考虑它的正确方法,下面的代码是否完全等同于上述代码?

int cnt=0;
while(n>0){
    n &= n - 1;
    cnt++;
}

如果是的话,为什么会选择以前的写作方式而不是while循环呢?在我看来,while循环将是这里最明确和最直观的选择,所以我想知道我错过的for循环是否有任何优势?谢谢你的任何建议!

1 个答案:

答案 0 :(得分:7)

  

如果我理解正确,循环中的中间条目应该是一个条件,但是n;似乎根本不是一个条件。

是。

  

除非它被理解为bool(如果n!= 0则为true,如果n == 0则为false)。

  

如果这是考虑它的正确方法,以下代码是否完全等同于上述代码?

近;它是n != 0,而不是n > 0

  

如果是的话,为什么会选择以前的写作方式而不是while循环?

由于各种原因,人们总是做傻事!

  

在我看来,while循环将是这里最清晰直观的选择

我同意。

  

我想知道在错过的for循环中是否有任何优势?

不。

嗯,不是这个。如果循环体不同,比如使用更复杂的逻辑和一个或两个continue语句,程序的行为可能会有所不同(如果您忘记在新代码路径上增加cnt)。但情况并非如此。