Konvertierung von bool zu int: Garantierte Werte von 0 oder 1
Bei der Konvertierung von bool-Werten in int entsteht ein häufiges Missverständnis. Während viele Compiler scheinbar Boolesche Werte als 0 oder 1 speichern, bleibt die Frage bestehen: Ist dieses Verhalten garantiert?
Frage:
Bedenken Sie das folgende C-Code-Snippet:
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
Was wird der Wert von c: 4 oder sein? 5?
Antwort:
Ja, c wird in C und C immer 4 sein.
Erklärung:
-
C : Nach dem C-Standard (§4.5/4): „Ein R-Wert vom Typ bool kann in einen R-Wert vom Typ int konvertiert werden, wobei false zu Null und True zu Eins wird.“ Daher wird b in 0 konvertiert.
-
C: In C (§6.3.1.2/1): „Wenn ein Skalarwert in _Bool konvertiert wird, ist das Ergebnis 0, wenn der Wert vergleicht gleich 0; andernfalls ist das Ergebnis 1. Dies impliziert, dass a in 1 konvertiert und in b gespeichert wird.
-
Konvertierung in int: Die Konvertierung von _Bool in int ist unkompliziert, da int sowohl 0 als auch 1 enthalten kann (§6.3.1.3) . In beiden Fällen bleibt der Wert von b unverändert, was dazu führt, dass c 3 0 = 4 ist.
Das obige ist der detaillierte Inhalt vonWelchen Wert hat „c' im folgenden C/C-Code: „int a = 2; bool b = a; int c = 3 b;`?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn