Implizite Konvertierung: Bool-zu-Int-Transformation
In C erfolgt eine nicht intuitive Konvertierung, wenn einer int-Variablen ein Bool-Ausdruck zugewiesen wird. Betrachten Sie den folgenden Codeausschnitt:
int x = 4 < 5; assert(x == 1); x = 4 > 5; assert(x == 0);
Konvertierungsdetails
Gemäß dem C-Standard (§4.7/4 in C 11/14, §7.8/4 in C 17, §7.3.9/2 in C 20):
Daher ist im angegebenen Code 4 < 5 wird als wahr ausgewertet, was in 1 umgewandelt und in x gespeichert wird, während 4 > 5 ergibt „falsch“, was in 0 umgewandelt und in x gespeichert wird.
Portabilität
Diese implizite Bool-zu-Int-Konvertierung ist auf allen C-Plattformen portierbar.
Vergleich mit C
Im Gegensatz zu C unterstützt C das nicht explizit bool-Datentyp vor dem C99-Standard. Mit dem C99-Standard wurde jedoch der Typ _Bool eingeführt, der bool in C entspricht. In C99 werden die Makros true und false zu den ganzzahligen Konstanten 1 bzw. 0 erweitert. Infolgedessen ist das Konvertierungsverhalten von Bool zu Int in C und C ähnlich.
Fazit
Die implizite Konvertierung von Bool zu Int im angegebenen Code ist standardkonform und über C-Plattformen portierbar. Obwohl es unorthodox erscheinen mag, ist es für das Verständnis des zugrunde liegenden Verhaltens der C-Sprache unerlässlich.
Das obige ist der detaillierte Inhalt vonWie konvertiert C boolesche Werte implizit in ganze Zahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!