(提前抱歉,这个问题可能非常简单。我把代码写成一个爱好,而我现在正试着把想法包围起来。)
我最近遇到一个循环语句,如(n
是先前设置的正整数):
int cnt;
for(cnt=0; n; cnt++){
n &= n - 1;
}
如果我理解正确,循环中的中间条目应该是条件,但n;
似乎根本不是条件。除非它被理解为bool(true
if n!=0
而false
if n==0
)。如果这是考虑它的正确方法,下面的代码是否完全等同于上述代码?
int cnt=0;
while(n>0){
n &= n - 1;
cnt++;
}
如果是的话,为什么会选择以前的写作方式而不是while循环呢?在我看来,while循环将是这里最明确和最直观的选择,所以我想知道我错过的for循环是否有任何优势?谢谢你的任何建议!
答案 0 :(得分:7)
如果我理解正确,循环中的中间条目应该是一个条件,但是n;似乎根本不是一个条件。
是。
除非它被理解为bool(如果n!= 0则为true,如果n == 0则为false)。
是
如果这是考虑它的正确方法,以下代码是否完全等同于上述代码?
近;它是n != 0
,而不是n > 0
。
如果是的话,为什么会选择以前的写作方式而不是while循环?
由于各种原因,人们总是做傻事!
在我看来,while循环将是这里最清晰直观的选择
我同意。
我想知道在错过的for循环中是否有任何优势?
不。
嗯,不是这个。如果循环体不同,比如使用更复杂的逻辑和一个或两个continue
语句,程序的行为可能会有所不同(如果您忘记在新代码路径上增加cnt
)。但情况并非如此。