Bin verwirrt von den Wahrheitswerten 0 und 1
-
Hallo allerseits,
also erstmal es geht um c (keine Ahnung ob das einen Unterschied machen wuerde bei meiner Frage)
Ich bin irgendwie etwas verwirrt mit den Wahrheitswerten 0 und 1.
Also zum Beispiel wenn man beim beenden einer Konsolenanwednung am Ende schreibt:return 0;das soll dem Betriebssystem ja sagen. Sind keine Fehler aufgetreten. Alles Ok.
Dementsprechend wuerde ich die 0 mit 'wahr' verbinden.ALlerdings wenn ich jetzt einen Ausdruck auswerte zum Beispiel:
int a = 1; int b = 0; int erg = (a && !b); /* hier kommt wahr raus, was mir auch einleuchtet allerdings verstehe ich nicht das jetzt auf einmal die 1 als wahr interpretiert wird */-> Waere nett wenn mir das mal einer Erklaeren wuerde, wann man 0 bzw. 1 mit wahr oder falsch interpretieren muss.
VIELEN DANK !!!
Mit Freundlichen Gruessen
Simon
-
In C++ ist Unwahr immer gleich 0, bzw. false. Wahr ist alles andere.
Der Rückgabewert der Main-Funktion ist einfach nur ein Sonderfall.
-
In der Unix-Shell(Konsole) ist der Rückgabewert 0 erfolgreich. Bei 1 traten Fehler auf. Evtl. deswegen
-
Die (imaginäre) Frage lautet: "Sind Fehler aufgetreten?".
Ein Programm kann so auch mitteilen, welcher Fehler aufgetreten ist, da alles ungleich 0 als wahr aufgefasst werden kann. Wenn man aber keine Details wissen möchte, kann man den Rückgabewert einfach auf ungleich 0 überprüfen um festzustellen, ob das Programm fehlerfrei durchlaufen konnte.
-
Hey danke fuer die schnellen Antworten.
wenn ich jetzt aber in c schreibe:
int b = 0; double d = 3.141; int erg = (b && d); // ergibt 1 also true??? muesste doch eigentlich falsch sein?
-
b ist doch 0 und damit ist der gesamte Ausdruck falsch. Wahr wäre er, wenn b und (&&) d ungleich 0 sind:
int b = -17; double d = 137.12; int erg = (b && d); // <-- ergibt wahr, da beide Werte ungleich 0 sind (egal ob positiv oder negativ)
-
oh ich habe grade gemerkt dass ich die Variable b davor bereits einmal inkrementiert hatte. Dann stimmts natuerlich wieder. sry
Danke nochmal!
-
Nanyuki schrieb:
Die (imaginäre) Frage lautet: "Sind Fehler aufgetreten?".
Ein Programm kann so auch mitteilen, welcher Fehler aufgetreten ist, da alles ungleich 0 als wahr aufgefasst werden kann.Nö, es gibt keine imaginäre Frage. Der Returncode eines Programms ist einfach kein boolscher Wert, sondern eben ein "int" Returncode, das ist alles.
Die einzige Verwandschaft ist dass per Konvention zwei Klassen von Returncodes unterschieden werden, nämlich "Null" (die Zahl, nicht NULL) und "ungleich Null".
Der Code für "kein Fehler" könnte aber genauso 42 sein. Oder man könnte eine ganze Range an "keine Fehler" Codes verwenden (wie dies bei COM z.B. verwendet wird - >= 0 ist "kein Fehler", < 0 ist "Fehler").
-
Übrigens wird in C/C++ nicht nur 1 als true gewertet, sondern alles ungleich 0.