2016-12-24 14 views
3

(事前に申し訳ありませんが、この質問はおそらく非常に簡単です。私は趣味として、コードを書いて、ちょうど今いくつかのものを中心に私の心をラップしようとしています。)forループに条件がありませんか?

nがある(ように私は最近、ループ文に遭遇しましたあらかじめ設定された正の整数):

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

私が正しく理解していれば、ループの真ん中のエントリは、条件にする必要がありますが、全くの状態であることをn;いないようです。ブールとして理解されていない場合(truen!=0およびfalseの場合はn==0)。これが正しい考え方であれば、次のコードは上記と完全に同じですか?

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

「はい」の場合、なぜ、whileループの代わりにこれを記述する従来のスタイルを選択するのですか? whileループは最も明確で直感的な選択であると思われるので、私が見逃したforループに利点があるのだろうか?ご意見ありがとうございます!

+4

"明確かつ直観的"は主観的ですが、コードの作成者は 'for'ループがより明確になると考えているかもしれません。私が考えることができる唯一の利点は、 'for'ループがコードの1行少ないことです。 – UnholySheep

+0

@UnholySheepしたがって、両方のコードスニペットが完全に同等であることを暗示していますか?情報ありがとうございました! – Kagaratsch

+2

'while'ループは同等ではありません。条件は' n!= 0'(または単に 'n')でなければなりません。それに加えて、 'for'ループがどのように実装されているかはほとんど変わりません。 –

答えて

7

私が正しく理解していれば、ループ内の真ん中のエントリは条件ですが、nです。まったく条件ではないようです。

です。

boolとして理解されていない場合(n!= 0なら真、n == 0なら偽)。

はい。

これが正しい考え方であれば、以下のコードは上記と完全に同じですか?

ほぼ;それはn != 0であり、n > 0ではありません。

「はい」の場合、なぜ、whileループの代わりにこれを記述する従来のスタイルを選択するのですか?

人々は、さまざまな理由から、常に愚かなことをしています。

私は同意whileループは、ここで最も明確かつ直感的な選択肢

だろうと私には思えます。

私が逃したforループに利点があるのだろうか?

いいえ。

まあ、この1つではありません。ループ本体が異なる場合、より複雑なロジックと、continueステートメントまたは2つのステートメントでは、プログラムの動作が異なる場合があります(新しいコードパスでcntをインクリメントするのを忘れた場合)。しかし、ここではそうではありません。

関連する問題