! auf int
-
int i;
(...)
i=0;
i=(!i);Wollte wissen, ob i dann nach Standard 1 ist?
-
ich glaube nicht das das der compiler so schluckt
du hast ja
i=o
und
!0 sind ja dann alle zahlen, warum gerade 1? denkste es würde ne fehlermeldung mit der zuweisung kommen, sicher bin ich nicht. aber komische art variablen so werte zuzuweisen
-
Wenn du unbedingt willst, dass !0 = 1 ist, dann verwende doch
bool var = false; var = !var;
#include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { bool x = true; int xInt = x; int not_xInt = !x; std::cout << xInt << ", " << not_xInt << std::endl; return 0; }
[Edit] Kompiliert zumindest mit VC++ ohne zu motzen [/Edit]
-
!i ist ein boolscher Ausdruck und in diesem Falle true. Dieser wird dann impliziert zu int konvertiert, demzufolge ja, i hat jetzt den Wert 1.
-
henselstep schrieb:
Wollte wissen, ob i dann nach Standard 1 ist?
Ja, ist es.
! bedeutet logisch negieren, erwartet somit einen boolschen Ausdruck. Da i keiner ist, wird implizit umgewandelt. 0 ergibt dabei false, alles andere true. Somit hast du folgendesi = (!false));
!false ergibt logischerweise true, und das wird dann i zugewiesen. Dabei wird von bool nach int umgewandelt und true evaluiert zu 1.
-
Whoa kompliziert
In C ist !0 als 1 definiert, da gibts ja kein bool. Und C++ will mit C kompatibel sein ...
-
kwart und groovemaster haben recht. immerhin gibt es eine standardkonvertierung bool->int und die macht nun mal true = 1 und false = 0. aber andersherum ist ja eigentlich 0 = false und der rest true.