Doppelte Negation in C: Gibt es garantiert 0/1 zurück?

Lesezeit: 1 Minute

Benutzeravatar von amit
zustimmen

Ist !!(x) garantiert durch den Standard, 0/1 zurückzugeben?

Beachten Sie, dass ich bin nicht fragen nach c++, wo ein bool-Typ definiert ist.

  • @DanFego: Es hat ein genau definiertes Verhalten, seit C zum ersten Mal standardisiert wurde, daher sollte der Standard keine Rolle spielen.

    – jamesdlin

    23. Dezember 2011 um 17:32 Uhr

  • mögliches Duplikat von Was ist !0 in C?

    – jamesdlin

    23. Dezember 2011 um 17:33 Uhr

  • C hat ein _Bool Typ und a bool Makro ein stdbool.h

    – Jens Gustedt

    23. Dezember 2011 um 21:32 Uhr

Benutzeravatar von Mat
Matte

Ja, in C99, siehe §6.5.3.3/4:

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 einen Typ int. Der Ausdruck !E entspricht (0==E).

So !x und !!y kann nur 0 oder 1 ergeben, as ints.

Für andere Operatoren in C99 siehe auch Ist das “wahre” Ergebnis von >, <, !, &&, || oder == definiert?

  • Danke. Nur wenn Sie neugierig sind, warum: Ich verwende es für den Uni-Wettbewerb, bei dem mein Code ohne gcc-Optimierungen ausgeführt wird, fand ich unter Verwendung !!x Verringern Sie dann die Zeit meines Codes um ~ 5% x = ( x ? 1 : 0). Wie auch immer, danke für das Zitat des Standards, es war sehr hilfreich.

    – amit

    25. Dezember 2011 um 6:56 Uhr

  • Wie sieht es mit den anderen C-Normen aus?

    – Seien Sie freundlich zu neuen Benutzern

    4. September 2019 um 16:21 Uhr

Benutzeravatar von Tim
Tim

Dies ist eigentlich ein Kommentar, aber er ist zu lang. (Bitte stimmen Sie es nicht allein auf dieser Grundlage ab.)

Ich habe ein sehr bizarres Dokument gefunden, als ich nach dem Standard gesucht habe, um Ihre Frage zu beantworten: Der neue C-Standard: Ein wirtschaftlicher und kultureller Kommentar. Und sie sagen, die Wissenschaft sei unterfinanziert. (Hier ist das vollständige PDF mit 2083 Seiten und 10,5 MB. Der vorherige Link ist nur der Abschnitt über die doppelte Negation.)

Zum Thema doppelte Verneinung heißt es:

Eine doppelte Verneinung wird im Englischen sehr oft als positive Aussage interpretiert (z. B. „Es ist nicht unbekannt, dass doppelte Verneinungen in C-Quelle vorkommen“). Dieselbe Semantik wie in C. Allerdings wird in einigen Sprachen (z. B. Spanisch) eine doppelte Verneinung so interpretiert, dass die Aussage negativer wird (diese Verwendung kommt in der umgangssprachlichen englischen Sprache vor, z. B. „Sie haben noch nichts gesehen“. , aber es ist selten und gesellschaftlich verpönt1).

Ich glaube, der Autor wäre froh zu wissen, dass dies für die Beantwortung Ihrer eigentlichen Frage (deren Antwort ja lautet) überhaupt nicht von Nutzen ist.

  • das Kriterium für die Abstimmung ist Nützlichkeit, und diese Antwort ist, wie Sie sagten, „überhaupt nicht von Nutzen“.

    – Peter Kirkham

    23. Dezember 2011 um 14:38 Uhr

  • @PeteKirkham, ich stimme respektvoll nicht zu, ebenso wie die FAQ: „Verwenden Sie Ihre Ablehnungen, wenn Sie auf einen ungeheuer schlampigen, mühelosen Beitrag oder eine Antwort stoßen, die eindeutig und möglicherweise gefährlich falsch ist.“ Trotzdem frohe Weihnachten und einen guten Rutsch ins neue Jahr.

    – Tim

    23. Dezember 2011 um 15:16 Uhr

  • @Tim Aber der Pfeil für Upvotes sagt “Diese Antwort ist nützlich”. Jetzt hat Ihr Beitrag die richtige Antwort auf die Frage am Ende, sodass man für seine Nützlichkeit plädieren kann. Aber ist es nützlich genug, um zu stimmen? Nicht wirklich, wenn man nur den Teil bedenkt, der die Frage des OP betrifft. Aber für Forschungsaufwand und einen tollen Fund dehne ich die Regeln ein bisschen 😉

    – Daniel Fischer

    23. Dezember 2011 um 15:55 Uhr

  • @DanielFischer naja vielen Dank. Ich habe jedoch nicht nach positiven Stimmen gesucht – es ist wirklich ein Kommentar, keine Antwort – ich wollte einfach keine DVs 🙂

    – Tim

    23. Dezember 2011 um 16:10 Uhr

  • Das habe ich verstanden, aber ich wollte dich für den lustigsten Fund seit Wochen belohnen 😀

    – Daniel Fischer

    23. Dezember 2011 um 16:17 Uhr

1395320cookie-checkDoppelte Negation in C: Gibt es garantiert 0/1 zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy