i = n >> 1 ;i = n >> 1
j0 = j0 ! i ;j0 ^= i
While ( i > j0 )
j0 = j0 ! i ; kann hier stehen
;... anderes Zeugs
i = i >> 1 ;i >>= 1 nach dem Schleifen rumpf
Wend
habe aber nicht getestet.
Und ja ich weiss dieses Zeichen ^ steht meistens für Exponenzieren in C ist es aber bitweise XODER.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
i = n >> 1 ;i = n >> 1
j0 = j0 ! i ;j0 ^= i
While ( i > j0 )
j0 = j0 ! i ; kann hier stehen
;... anderes Zeugs
i = i >> 1 ;i >>= 1 nach dem Schleifen rumpf
Wend
habe aber nicht getestet.
Und ja ich weiss dieses Zeichen ^ steht meistens für Exponenzieren in C ist es aber bitweise XODER.
D'oh! Da hast du jetzt aber eine Gut bei mir, danke.
Was dein "kann hier stehen" anbelangt, so kommt es ja darauf an, ob j0 von "anderem Zeugs" in der Schleife gebraucht wird. Warum die Bedingung der While-Schleife wohl weg war? Hier im Code ist sie da, allerdings hatte ich einen Kommentar dahinter entfernt, evtl. war ich da etwas zu übereifrig
Beginne jeden Tag als ob es Absicht wäre! BILDblog
folgt.
Es steht also in While/Wend schleife entweder ganz oben oder ganz unter.
Das entspricht dann der Reienfolge der Ausführung in einer C for-Schleifedie:
for (i = n >> 1;//initialisierung
i > (j0 ^= i);//Fortlauf-Bedigung wird vor dem Schleifenrumpf ausgeführt/ausgewertet
i >>= 1 ){ //Aktualisierung wird erst nach dem Schleifenrumpf ausgeführt
...anderes Zeugs...
}
Aber du bist sicher mittlerweile schon selbst darauf gekommen.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
for (i = n >> 1;//initialisierung
i > (j0 ^= i);//Fortlauf-Bedigung wird vor dem Schleifenrumpf ausgeführt/ausgewertet
i >>= 1 ){ //Aktualisierung wird erst nach dem Schleifenrumpf ausgeführt
...anderes Zeugs...
}
Genau, aber da ich "j0 ^=i" doch bereits einmal vor der Schleife ausgeführt habe, darf ich den zweiten Aufruf erst am Schleifenende platzieren.
Beginne jeden Tag als ob es Absicht wäre! BILDblog
Genau, aber da ich "j0 ^=i" doch bereits einmal vor der Schleife ausgeführt habe,
Ja aber es muss dann in der schleife irgendwo wieder ausgeführt werden, und wenn j0 nur einen Einfluss auf den Schleifenrumpf hätte, wäre es egal ob es ganz oben oder ganz unten stehen würde.
Aber trotzdem muss in diesem Fall "j0 = j0 ! i" ganz unten nach dem "i = i >> 1" stehen, weil j0 muss vor der Auswertung der Schleifenbedigung (nach dem i geändert wurde), aktualisiert werden. Jetzt sehe ich das, die schleife sollte also so aussehen:
Danke, ich denke das haut jetzt so hin. Habe mir gerade auch extra einen C-Compiler installiert und zur Bestätigung einmal folgenden Code drauf los gelassen:
#include <stdio.h>
int A(){
printf("A");
return 0;
}
int B(){
printf("B");
return 3;
}
int C(){
printf("C");
return 1;
}
int main(void){
int i, k;
for (i = A(); i < B(); i += C()){
printf("\nZeugs\n");
}
printf("\n\n######\n\n");
i = A();
k = B();
while (i < k){
printf("\nZeugs\n");
i += C();
k = B();
}
printf("\n\n");
return 0;
}
Demnach passt das so wie wir es haben (also die Ausführungsreihenfolge)
Beginne jeden Tag als ob es Absicht wäre! BILDblog