Wenn NICHT grösser
-
Wenn id NICHT grösser als a ist dann soll OK ausgeben werden.
Aber id ist hier grösser als b wieso bekomme ich nicht OK ausgeben ... Also ich bin mitsicherheit kein Genie der Programmierung mache es aber schon etwas länger und jetzt kapier ich hier nicht wieso da nicht OK ausgeben wird.Eigentlich sollte ich mich jetzt ine Ecke Stellen und schämen aber ich kapier gerade echt net. NEED HELP QQ
int id = 99; int b = 8; if ( id >! b ) { cout<<"OK"; }
-
int id = 99; int b = 8; if ( !(id > b) ) { cout<<"OK"; }
-
int id = 99; int b = 8; if ( id <= b ) { cout<<"OK"; }
-
Danke, jetzt gehts kp wieso ich das gerade nicht kapiert habe. Echt peinlich ... Zeit Pause zu machen ...
-
BrainDead<-- schrieb:
int id = 99; int b = 8; if ( id >! b ) { cout<<"OK"; }
Dass das nicht geht ist ganz logisch:
id > !b
ist deine Bedingung. Da wird erstmal das hier evaluiert:
!b
und das ist für b = 0 wahr (oder ungleich null).
Zurück gedacht bedeutet das: Wenn id größer als (nicht b) ist
Da b bei dir 8 ist, ist !b gleich 0. Und 99 ist halt größer als 0.
-
Skym0sh0 schrieb:
Dass das nicht geht ist ganz logisch:
id > !b
ist deine Bedingung. Da wird erstmal das hier evaluiert:
!b
und das ist für b = 0 wahr (oder ungleich null).
Zurück gedacht bedeutet das: Wenn id größer als (nicht b) ist
Da b bei dir 8 ist, ist !b gleich 0. Und 99 ist halt größer als 0.Das verstehe ich nicht?
Dann würde das ja immer eintreffen solange nicht b = 0 ist?(EDIT: nicht mal dann unbedingt) Und ich glaube das ist nicht das was er wollte oder?
-
Fuchs aus dem Wald schrieb:
Und ich glaube das ist nicht das was er wollte oder?
Deswegen hat er ja auch ein Problem damit gehabt.
-
Fuchs aus dem Wald schrieb:
Das verstehe ich nicht?
Dann würde das ja immer eintreffen solange nicht b = 0 ist?(EDIT: nicht mal dann unbedingt)Exakt
Fuchs aus dem Wald schrieb:
Und ich glaube das ist nicht das was er wollte oder?
Genau und deshalb beschwert er sich ja auch, das sein Code nicht tut was er möchte.
-
Wollten tutete er das nicht, denn sonst hätte er hier nicht nach gefragt. Aber das war das was er im Eingangspost geschrieben hat und was der Compiler draus macht.
id > !b
ist immer dann wahr wenn
b != 0 -> id > 0
Interessanter ist die Frage, wanndie Bedingung wahr ist, wenn b = 0 ist!
Test mit GccDenn der Standard sagt, dass jeder Zustand wahr ist, der nicht 0 ist für ints.
Wenn der unterliegende Compiler also mal ganz cool ist, dann macht er aus
int b = 0; int t = !b;
für t eine beliebige Zahl != 0. Und dann kannst du das quasi nicht mehr wirklich determinieren, was du da für eine Bedingung hast.
-
Das kann ja dann nur wahr werden wenn für
b != 0id > 0;
oder b = 0
id > 1;
-
Bei b = 0 ist nicht garantiert, dass !b = 1 ist!
-
Ok das wundert micht.
Kannst du mir das begründen? Also ist jetzt reine Neugierde.
-
Skym0sh0 schrieb:
Bei b = 0 ist nicht garantiert, dass !b = 1 ist!
Ähm, doch? Standardlesen bildet.
-
Skym0sh0 schrieb:
Bei b = 0 ist nicht garantiert, dass !b = 1 ist!
In bin mir nicht sicher, aber ich glaube schon, dass im Standard definiert ist, dass bei bool -> int immer nur 0 und 1 herauskommt.
-
Hätte ich nun jetzt auch gedacht da 0 ja als false interpretiert wird. Würde heißen !false == true.
-
Ok
§4.7.4 schrieb:
If the destination type is bool, see 4.12. If the source type is bool, the value false is converted to zero and the value true is converted to one.
Ich hab eigentlich einfach nur umgekehrt gedacht, alles was nicht null ist wird zu true gemacht, wenn bool der Zieltyp ist. Und ich dachte halt vice-versa.
-
Skym0sh0 schrieb:
Ich hab eigentlich einfach nur umgekehrt gedacht, alles was nicht null ist wird zu true gemacht, wenn bool der Zieltyp ist. Und ich dachte halt vice-versa.
Nein. Daher kommen so komische Tricks wie
!!integer_variable
, die man manchmal sieht, um einen Zahlenwert zu 0 oder 1 zu machen.
-
Mh, wieder was gelernt.
Ich sollt echt mal öfters im Stadnard blättern...
-
@Skym0sh0:
Ich hab auch was gelernt!
Vor allem hat mich das grade gefreut das ich das noch mal gefragt habe.
Ich mein du bist ja nun wirklich schon länger mit C++ am machen als ich.
-
Dafür ist das Forum da. Und wenn man nicht lernresistent ist, kommt hier echt einiges bei rum.
Aber jetzt mal ohne Spass, ich war von meiner ehemaligen Meinung echt 100%ig überzeugt, dann guck ich in den Standard und fall vom Stuhl...