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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren