2011-01-10 11 views
2

nehme ich eineOne‘s Complement einer Reihe

int a = 512

Jetzt Variable haben, wenn ich eine Anwendung, die ~ Einerkomplement in c.How bedeutet, ich bin -513 als die Ausgabe zu bekommen.

int ist mindestens 16 Bits in Größe und binäre Äquivalent von 512

0000 0010 0000 0000 ist Und jetzt, wenn Sie tun, um seine eigenen ergänzen wird es

1111 1101 1111 1111. Jetzt mir jemand sagen könnte, warum Die Ausgabe ist -513.

Kann ich jetzt hoffen, dass Leute in diesem Forum meine Frage verstanden haben.

+2

Der Operator '~' wird "bitweise Negation" genannt. "One's Complement" ist nur eine Möglichkeit, vorzeichenbehaftete Zahlen darzustellen, aber es gibt andere, wie das weit verbreitete "Zweier-Komplement". Im Fall von "Einerkomplement" verhält sich die bitweise Negation wie eine arithmetische Negation, die in C vom unären "-" Operator ausgeführt wird (es gibt auch ein binäres "-"). Sie haben jedoch eine völlig andere Bedeutung. '~' schaltet nur jedes Bit um und ignoriert dabei jede Semantik des zugrunde liegenden Typs. '-' kennt die Semantik des Typs. – datenwolf

Antwort

11

Negative Zahlen werden oft als two's complement dargestellt, weshalb es so interpretiert wird, wie es ist.

Angenommen, int ist 16-Bit, haben Sie das Bitmuster 1111 1101 1111 1111. Da das oberste Bit gesetzt ist, ist die Anzahl negativ. Um nach den Regeln für Zweierkomplement in Dezimal zu konvertieren, wird die Zahl zuerst bitweise invertiert. Das bringt deine 512 zurück. Dann wird eine hinzugefügt, die 513 ergibt. Und da die Zahl negativ war, erhalten wir -513.

+0

hätte ich es besser nicht selbst sagen können. – chronodekar