Frage

Ich habe einen Kollegen, der behauptet, dass TRUE früher als 0 definiert wurde und alle anderen Werte FALSE waren.Ich könnte schwören, dass in jeder Sprache, mit der ich gearbeitet habe, der Wert für FALSE 0 ist, wenn man überhaupt einen Wert für einen booleschen Wert erhalten könnte.War TRUE früher 0?Wenn ja, wann haben wir gewechselt?

War es hilfreich?

Lösung

Die 0 / nicht-0, was Ihre Mitarbeiter verwirrt ist über wahrscheinlich bezieht sich auf, wenn die Leute verwenden numerische Werte als Rückgabewert Erfolg angibt, nicht Wahrheit (das heißt in Bash-Skripte und einige Arten von C / C ++).

Verwenden 0 = Erfolg für eine viel größere Genauigkeit ermöglicht Ausfallursachen in spezifiziert (beispielsweise 1 = Datei fehlt, 2 = fehlendes Glied, und so weiter).

Als Randnotiz: in Ruby, die nur falschen Werte sind null und falsch. 0 ist wahr, aber nicht im Gegensatz zu anderen Zahlen entgegengesetzt. 0 ist wahr, weil es sich um eine Instanz des Objekts 0 ist.

Andere Tipps

Es ist in Bezug auf einen Ergebniscode von 0 sein könnte, die in den meisten Fällen nach einem Prozess eines Ergebniscode von 0 ausgeführt wird, gemeint: „Hey, alles funktionierte gut, keine Probleme hier.“

ich bei einer Firma arbeitete mit einer großen Menge von altem C-Code. Einige der gemeinsamen Header definierten ihre eigenen Werte für wahr und falsch, und einige in der Tat haben TRUE als 0 und FALSCH als 1. Diese auf „Wahrheit Kriege“ geführt:

/* like my constants better */
#undef TRUE
#define TRUE 1

#undef FALSE
#define FALSE 0

Wenn nichts anderes, Bash-Shells noch 0 verwendet für wahr, und 1 für falsch.

Verschiedene Funktionen im C-Standard-Bibliothek zurück einen ‚Fehlercode‘ integer als Ergebnis. Da noErr als 0 definiert ist, kann eine schnelle Überprüfung sein ‚wenn es 0 ist, dann ist es Ok‘. Die gleiche Konvention durch zu einem Unix-Prozess ‚Ergebniscode‘; das heißt, eine ganze Zahl, die etwas inidication über gab, wie ein bestimmten Prozess beendet.

In Unix-Shell-Scripting, das Ergebnis Code eines Befehls ist nur ausgeführt zur Verfügung, und tipically verwendet, um anzuzeigen, wenn der Befehl ‚gelungen‘ oder nicht, mit 0 Erfolg bedeutet, und alles, was eine spezifische nicht-Erfolgsbedingung.

Von diesem, alle Testartige Konstrukten in Shell-Skripten verwenden ‚Erfolg‘ (das heißt, ein Ergebniscode 0) bedeutet TRUE, und alles, was FALSE bedeutet.

Auf einer ganz anderen Ebene, digitale Schaltungen frecuently ‚negative Logik‘ verwenden. das heißt, auch wenn 0 Volt ‚binäre 0‘ und einiger positiver Wert genannt (allgemein + 5 V oder 3,3 V, aber heutzutage ist es nicht selten + 1,8 V zu verwenden) ‚binäre 1‘ genannt wird, werden einige Ereignisse ‚behaupten‘ durch einen gegebenen Stift auf 0 gehen ich denke, es gibt einige Lärm feste Vorteile, aber ich bin mir nicht sicher über die Gründe.

Beachten Sie jedoch, dass es nichts ‚alte‘ oder einig ‚Schaltzeit‘ darüber. Alles, was ich darüber weiß, basiert auf alten Konventionen, sondern sind ganz aktuell und relevant heute.

Ich bin nicht sicher, aber ich kann Ihnen sagen: Tricks auf der zugrunde liegende Natur von wahr und falsch sind anfällig für Fehler zu verlassen, weil die Definition dieser Werte wird auf die Implementierer der Sprache links (oder, bei der dest der Spezifizierer).

Systemaufrufe in der C-Standardbibliothek typischerweise -1 zurück auf Fehler und 0 auf Erfolg. Auch berechnet die Fotran if-Anweisung würde (und wahrscheinlich noch nicht) springt auf einen von drei Zeilennummern auf der Bedingung abhängig zu weniger als die Bewertung, die gleich oder größer als Null ist.

zB: IF (I-15) 10,20,10

würde für den Zustand der I-Test == 15 Springen Zeile 20, wenn true (bewertet zu Null) und Linie 10 sonst.

Sam ist direkt über die Probleme auf spezifische Kenntnisse über Implementierungsdetails zu verlassen.

Generell gilt:

  1. Shells (DOS enthalten) verwenden "0" als „Nein Error“... nicht unbedingt wahr.

  2. Programmiersprachen verwenden Nicht-Null bezeichnen wahr.

Das heißt, wenn Sie in einer Sprache sind, die Ihre definieren TRUE von FALSE können, definieren sie und immer die Konstanten verwenden.

Auch heute in einigen Sprachen (Rubin, Lispeln, ...) 0 ist wahr, weil alles außer null ist wahr. Öfter 1 wahr. Das ist eine gemeinsame Gotcha und so ist es manchmal eine gute Praxis nicht darauf verlassen, als auf 0 sind falsch, aber einen expliziten Test zu tun. Java erfordert, dass Sie dies tun.

Statt dessen

int x;    
....
x = 0;
if (x)  // might be ambiguous
{
}

Jetzt ist explizit

if (0 != x)
{
}

Ich erinnere dabei einig VB-Programmierung in einem Access-Formular, wo zutraf -1.

Ich erinnere mich, PL / 1 keine boolean Klasse hatte. Sie könnten ein wenig erstellen und das Ergebnis eines Booleschen Ausdrucks zuweisen. Dann, es zu benutzen, musste man nicht vergessen, dass ein falsch war und 0 wahr ist.

In den meisten Fällen ist „falsch“ als 0 definiert und „wahr“ ist ungleich Null.Einige Programmiersprachen verwenden 1, andere -1 und einige verwenden einen beliebigen Wert ungleich Null.

Für Unix-Shells verwenden sie jedoch die umgekehrte Konvention.

Die meisten Befehle, die in einer Unix-Shell ausgeführt werden, sind eigentlich kleine Programme.Sie geben einen Exit-Code zurück, sodass Sie feststellen können, ob der Befehl erfolgreich war (Wert 0) oder ob er aus irgendeinem Grund fehlgeschlagen ist (1 oder mehr, abhängig von der Art des Fehlers).

Dies wird in den sh/ksh/bash-Shell-Interpretern innerhalb der if/while/until-Befehle verwendet, um Bedingungen zu überprüfen:

if command
then
   # successful
fi

Wenn der Befehl erfolgreich ist (dh einen Null-Exit-Code zurückgibt), wird der Code in der Anweisung ausgeführt.Normalerweise wird der Befehl [ verwendet, der ein Alias ​​für den Testbefehl ist.

Das Komische ist, dass es auf der Sprache hängt mit Ihrem arbeiten. In Lua gilt == null intern für Leistung .. Das gleiche gilt für viele syscalls in C.

Es ist leicht verwirrt zu erhalten, wenn bash Wahr / Falsch-return-Anweisungen in die andere Richtung sind um:

$ false; echo $?
1
$ true; echo $?
0

Ich habe gehört, von und älteren Compiler verwendet, bei denen true> 0, und false <= 0

Das ist ein Grund, warum Sie wollen nicht für Null zu überprüfen, ob (Zeiger) oder wenn (Zahl) verwenden, könnten sie auf false unerwartet bewerten.

Und ich habe auf Systemen gearbeitet, wo NULL nicht Null war.

In der Sprache C, C ++ vor, war es nicht so etwas wie ein boolean. Conditionals wurden durch Testen ints gemacht. Null bedeutet, falsch und jeder Nicht-Null bedeutete wahr. So könnten Sie schreiben

if (2) {
  alwaysDoThis();
} else {
  neverDothis();
}

Zum Glück erlaubt C ++ einen eigenen Typ boolean.

In jeder Sprache, die ich je gearbeitet habe in (zurück in den späten 70er Jahren zu BASIC), falsch ist 0 betrachtet und wahr war nicht Null ist.

Ich kann mich nicht erinnern TRUE 0 zu sein. 0 ist etwas, ein C-Programmierer zurückkehren würde Erfolg anzuzeigen, though. Dies kann mit TRUE verwechselt werden.

Es ist nicht immer 1 entweder. Es kann -1 oder nur Nicht-Null werden.

Für Sprachen ohne einen in boolean Typ gebaut, die einzige Konvention, die ich gesehen habe, ist WAHR als 1 und FALSCH als 0. Beispiel zu definieren, in C, wird die if Anweisung ausführen, die Klausel, wenn wenn der bedingte Ausdruck ergibt etwas anderes als 0 ist.

Ich sah sogar einmal ein Dokument Code-Richtlinien, die speziell die nicht WAHR und FALSCH neu zu definieren. :)

Wenn Sie eine Sprache verwenden, die ein in boolean gebaut hat, wie C ++, dann Schlüsselwörter true und false Teil der Sprache sind, und Sie sollten sich nicht darauf verlassen, wie sie tatsächlich umgesetzt werden.

In Sprachen wie C gab es keinen Booleschen Wert, so dass Sie Ihre eigenen hatte zu definieren. Könnten sie auf einer Nicht-Standard-BOOL Überschreibungen gearbeitet haben?

DOS und Exit-Codes von Anwendungen in der Regel 0 verwenden, um meinen Erfolg und Nicht-Null-Fehler von irgendeiner Art zu bedeuten!

DOS-Fehlercodes ist 0-255 und bei der Verwendung der ‚Errorlevel‘ Syntax bedeutet etwas über oder mit dem angegebenen Wert getestet, so dass die folgenden Matches 2 und oben zur ersten goto, 1 zum zweiten und 0 (Erfolg) zu der letzte!

IF errorlevel 2 goto CRS
IF errorlevel 1 goto DLR
IF errorlevel 0 goto STR

Der SQL Server-Datenbank-Engine optimiert Speicherung von Bit-Spalten. Wenn es 8 Bit oder weniger Spalten in einer Tabelle sind die Spalten als 1 Byte gespeichert. Wenn es von 9 bis zu 16-Bit-Spalten ist, werden die Spalten als 2 Bytes gespeichert, und so weiter. Die String-Werte TRUE und FALSE können Bit-Werte umgewandelt werden: TRUE wird umgewandelt zu 1 und FALSCH wird auf 0 umgewandelt. Konvertieren in Bit fördert jeden Nicht-Null-Wert auf 1.

kann jede Sprache hat 0 als wahr oder falsch So stoppen wahr mit Zahl mit Worten lol Oder t und f 1 Byte-Speicher

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top