2017-03-06 1 views
0

wenn x = 1 was sollte ! x | x angenommen werden? Ich bin wirklich verwirrt als was ich es tat: x = 1 = 01 in binär, !x = 10 !x | x = 11 = 3 dezimal.Bitweise C Betrieb

Aber es sollte 1 sein (auch versuchen gehen hexadezimal (etwas langwieriger, aber was ich als under lerne), ich habe -1)

Antwort

4

Die ! der Negationsoperator logisch ist. Wenn Sie es nicht null Dinge geben, gibt es Ihnen eine Null zurück. Wenn Sie es eine Null geben es gibt Ihnen zurück 1.

So

!x | x 
=> !1 | 1 
=> 0 | 1 
=> 1 

Beachten Sie, wie dies vom Bediener bitweise Negation unterscheidet, ~. Wenn Sie diese anstelle von ! benutzt hatte, würde Dinge wie diese ausgearbeitet haben (vorausgesetzt, 8-Bit-Werte, können Sie bis zu 32 oder 64 oder was auch immer maßstäblich):

~x | x 
=> ~1 | 1 
=> 11111110 | 00000001 
=> 11111111 
=> -1 

Es kommt alles um den Unterschied zu verstehen zwischen ! und ~. Es ist nicht offensichtlich; Es ist nur etwas, an das man sich gewöhnen muss. Nur als Erinnerung

!7 = !23423523 = !46 = !(-200) = !1 = 0 

Für Nicht-Null-x, !x = 0. Ist einfach so. Die Idee dahinter ist, dass C 0 als falsch und alles andere als wahr nimmt. Also, da ein Wert wie 70.343 oder 1 gilt als wahr, gibt ! es die Anwendung falsche oder 0

1

der ! Operator ist für die logische Negation, ist !x entspricht x == 0 für numerische und Zeigertypen.

!x hat int Typ und einen Wert von 1 wenn x vergleicht gleich 0 und hat einen Wert von 0 für alle anderen Fälle.