! 0 garantiert 1 in C89?

8

Ich habe den Standard gesucht, aber den erwähnten Teil nicht bemerkt.

Ist es nur "alles andere als 0" und 1 oder ist es compilerabhängig?

    
susdu 16.02.2016, 18:28
quelle

2 Antworten

23
  

Das Ergebnis des logischen Negationsoperators ! ist 0, wenn der Wert seines Operanden ungleich 0 ist, 1, wenn der Wert seines Operanden gleich 0 ist. Das Ergebnis hat den Typ int .

Erscheint in C89 / C90, C99 und C11.

    
hobbs 16.02.2016, 18:32
quelle
4

Wie Hobbs in seiner Antwort sagte, Abschnitt 6.5.3.3.5 des C-Standard besagt, dass !0 zu 1 ausgewertet wird.

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 normieren.

  • Wenn x = 0 , !!x = !!0 = !1 = 0 .
  • Wenn x ! = 0 , !x = 0 , also !!x = !0 = 1 .
dbush 17.02.2016 13:13
quelle

Tags und Links