Ich habe den Standard gesucht, aber den erwähnten Teil nicht bemerkt.! 0 garantiert 1 in C89 zu sein?
Ist es nur „alles andere als 0“ und 1 oder es ist Compiler-abhängig?
Ich habe den Standard gesucht, aber den erwähnten Teil nicht bemerkt.! 0 garantiert 1 in C89 zu sein?
Ist es nur „alles andere als 0“ und 1 oder es ist Compiler-abhängig?
Das Ergebnis des logischen Negationsoperators
!
ist 0, wenn der Wert des Operanden auf 0, 1, wenn der Wert des Operanden das Ergebnis gleich 0 vergleicht Typen hatint
ungleicher vergleicht.
Erscheint in C89/C90, C99 und C11.
Können Sie den Link hinzufügen, wo Sie das gefunden haben? – AustinWBryan
http://port70.net/~nsz/c/c89/c89-draft.html#3.3.3.3 –
Vielen Dank! – susdu
Wie hobbs in seiner Antwort sagte section 6.5.3.3.5 of the C standard heißt es, dass !0
-1
auswertet.
Zusätzlich kann dieses Verhalten verwendet werden, um eine ganze Zahl auf einen booleschen Wert (d. H. Entweder 0
oder 1
) mit dem Ausdruck !!x
zu normalisieren.
x
= 0
, !!x
= !!0
= !1
= 0
.x
! = 0
, !x
= 0
, so !!x
= !0
= 1
.
Integrierte Operatoren, die logisch Booleschen Ergebnisse liefern ('<', '>', '<=', '> =', '==', '! =', '&&', '||', '!') Ergeben immer genau '0' oder' 1' vom Typ 'int'. Bestimmte Bibliotheksfunktionen, wie 'isdigit()', geben "0" für false oder irgendeinen Wert ungleich null für true zurück. –