Kleine kurze kurze Frage zum Syntax

Gast #3977207
Lesenswert?
• ▲
▼
Ich stehe gerade total auf dem Schlauch...

Wenn ich jetzt davon ausgehe...  Das ich z.b Pool...  = 1 ist und ich es 
einmal negiere... !...  Wird die 1 zu einer 0... Negiere ich es jetzt 
noch einmal...!...  Wird es wieder zu einer 1 oder?
#3977251
Lesenswert?
• ▲
▼
1
p = !!p;
tut das gleiche wie
1
p = (p != 0) ? 1 : 0;
was wiederum das gleiche tut wie
1
if (p != 0)
2
    p = 1;
3
else
4
    p = 0;

Erklärung: In C steht jeder Zahlenwert ≠ 0 für „wahr“, nur 0 ist 
„falsch“. Durch Negieren (per !) wird aus jedem „wahr“-Wert also 0, aus 
einer 0 aber immer eine 1 (und nicht irgendeine Zahl).
#3977253
Lesenswert?
• ▲
▼
Das ! ist eine logische Negation. Zu unterscheiden von der bitweisen 
Negation, die in C mit ~ erreicht wird. In C sind alle Werte die nicht 0 
sind "true", daher werden diese Werte durch die erste Negation zu 0. 
Daher werden bei zweimaliger logischer Negation alle Werte >=1 auf 1 
abgebildet und die 0 auf sich selbst.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.