2016-12-24 5 views
3

(Leider im Voraus, ist diese Frage wahrscheinlich sehr einfach. Ich Code als Hobby zu schreiben und ich versuche gerade jetzt um einige Dinge, meine Meinung zu wickeln.)Keine Bedingung in einer for-Schleife?

ich eine Schleife Aussage wie kürzlich angetroffen (n a zuvor eingestellte positive ganze Zahl):

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

Wenn ich richtig verstehe, sollte der mittlere Eintrag in einer Schleife eine Bedingung sein, aber n; scheint nicht zu einem Zustand überhaupt zu sein. Es sei denn, wenn es sich um ein bool (true wenn n!=0 und false wenn n==0) verstanden wird. Wenn dies der richtige Weg ist, darüber nachzudenken, würde der folgende Code dem obigen vollkommen entsprechen?

Wenn ja, warum sollte man den früheren Schreibstil anstelle der while-Schleife wählen? Es scheint mir, dass eine while-Schleife hier die klarste und intuitivste Wahl wäre, also frage ich mich, ob es einen Vorteil in der for-Schleife gibt, den ich verpasst habe? Danke für jeden Vorschlag!

+4

"klar und intuitiv" ist subjektiv, vielleicht hält der Autor des Codes die 'for' Schleife für klarer? Der einzige Vorteil, den ich mir vorstellen kann, ist, dass die for-Schleife eine Codezeile weniger ist. – UnholySheep

+0

@UnholySheep Sie meinen also, dass beide Code-Schnipsel vollkommen gleichwertig sind? Danke für die Information! – Kagaratsch

+2

Die 'while' Schleife ist * nicht * äquivalent, die Bedingung sollte' n! = 0' (oder einfach 'n') sein, damit sie äquivalent ist. Außerdem ist es fast so, wie 'for' Loops implementiert werden. –

Antwort

7

Wenn ich richtig verstehe, sollte der mittlere Eintrag in einer Schleife eine Bedingung sein, aber n; scheint überhaupt keine Bedingung zu sein.

Es ist.

Es sei denn, wenn es als bool verstanden wird (wahr wenn n! = 0 und falsch wenn n == 0).

Ja.

Wenn dies der richtige Weg ist, darüber nachzudenken, würde der folgende Code dem obigen vollkommen entsprechen?

Fast; es ist n != 0, nicht n > 0.

Wenn ja, warum sollte man den früheren Schreibstil anstelle der While-Schleife wählen?

Menschen machen die ganze Zeit dumme Sachen, aus allen möglichen Gründen!

Es scheint mir, dass eine while-Schleife hier die übersichtliche und intuitive Wahl

Ich bin damit einverstanden wäre.

Ich frage mich, ob es einen Vorteil in der for-Schleife gibt, die ich verpasst habe?

Nein.

Nun, nicht für diesen. Wenn der Schleifenkörper anders wäre, sagen wir mit komplexerer Logik und einer continue Anweisung oder zwei, könnte das Verhalten des Programms anders sein (wenn Sie vergessen haben, cnt auf Ihrem neuen Code-Pfad zu inkrementieren). Aber das ist hier nicht der Fall.

Verwandte Themen