bool negieren Geschwindigkeit?
-
Warum ist
test ^= testschneller als
test = !test? Gibt es andere Schreibweisen die noch schneller sind?
-
Es kann sein, dass das erste immer dumm 0 macht.
Warum ist X schneller als Y? Nun, ich glaube nicht, dass A schneller ist als Z. Ich kenne aber noch B:
test ^= 1
-
booleanz schrieb:
Gibt es andere Schreibweisen die noch schneller sind?
Ja, die leere Anweisung ist noch schneller:
;
-
Gibt es andere Schreibweisen die noch schneller sind?
Ja, die leere Anweisung ist noch schneller:
C++:
;Versteh ich nicht wenn ich ehrlich bin.
-
booleanz schrieb:
Gibt es andere Schreibweisen die noch schneller sind?
Ja, die leere Anweisung ist noch schneller:
C++:
;Versteh ich nicht wenn ich ehrlich bin.
Deine beiden Codebeispiele verhalten sich unterschiedlich. Deshalb macht es keine Sinn, ihre Performance zu vergleichen.
Wenn es eine zu
test = !testäquivalente Codezeile gäbe, die schneller wäre, hätte der Compilertest = !testzu dieser umgeschrieben.
-
test = !test;Auf diese Weise führst du eine boolesche Negation aus, die bei Wert 0 1 zurückgibt bzw. bei !0 0.
test ^= test;Dies dagegen ist eine bitweise Negation. Im Fall vom Wert 0 würden alle Bits 0en seien und beim Negieren auf 1 gesetzt werden. Dies würde zwar als Wahrheitswert stimmen, da der Wert !0 ist, aber betrachten wir es mal andersrum: bei Wert 1 wäre nur das erste Bit 1 und der Rest 0en. Bei Negation wäre der Wert immer noch !0 und somit das Ergebnis falsch.
-
Youka schrieb:
test ^= test;Dies dagegen ist eine bitweise Negation.
nein ist es nicht. Es ist ein bitweises XOR, das heißt, test ist dannach immer 0;
eine bitweise negation sieht so aus:
test ~= test;
-
vlad_tepesch schrieb:
eine bitweise negation sieht so aus:
test ~= test;Du meinst wohl
test = ~test;
-
ribidibim schrieb:
Du meinst wohl
test = ~test;Ups. tatsache, den gibts ja gar nicht als kombinierten Operator.
-
Ne, und dieser wäre sowieso unär.
-
vlad_tepesch schrieb:
Youka schrieb:
test ^= test;Dies dagegen ist eine bitweise Negation.
nein ist es nicht. Es ist ein bitweises XOR, das heißt, test ist dannach immer 0;
eine bitweise negation sieht so aus:
test ~= test;Ups, stimmt, das ist sogar noch schlimmer :p