Der Martin: Bitweise Negation und Zweierkomplement

Beitrag lesen

Hallo,

wie funktioniert das genau mit der bitweisen Negation?

so wie es sich anhört: Alle Bits werden negiert, also umgekehrt.

~8 = -9
Ich seh da:
~1000 = 0111 = 7

Da hast du dich mit deiner Erklärung selbst verarscht, indem du die Wortbreite zu klein gewählt hast. ;-)
Wenn du in nur 4 Bits vorzeichenbehaftete Zahlen im Zweierkomplement darstellen möchtest, dann ist 8 schon außerhalb deines Zahlenbereichs. Denn wie du richtig dargestellt hast, wäre 8 = 1000b. Da ist aber das höchste Bit schon gesetzt, dieser Binärwert ergibt bei der Rückwandlung eigentlich -8.
Nehmen wir lieber mal 8 Bits, dann klappt dein Zahlenbeispiel auch, denn mit 8 Bit kann man in Zweierkomplementdarstellung den Zahlenbereich -128..+127 darstellen.
Dann ist

8 = 0000 1000b = 08h
 ~8 = 1111 0111b = F7h

Und 1111 0111b entspricht in dezimaler Darstellung tatsächlich -9. Das kannst du jetzt auch noch auf 16 oder 32 Bit erweitern, meinetwegen auch auf 64, es passt in jedem Fall.

Das Minus kann ich mir ja noch vorstellen, bei einer 32-bit Zahl, ist das erste Bit für das Vorzeichen. Was aber passiert dann mit den ganzen Null-Bits dazwischen, wenn ich es mit der 8 mal genau nehme:
8 = 00000000000000000000000000001000

Ist doch klar:
  ~8 = 11111111111111111111111111110111

Jetzt besser mit dem Schlauch?

So long,
 Martin

--
Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.