2016-09-21 3 views
2

Ich bin neu hier, aber ich habe mich nur gefragt, was ~ 0 wäre, wenn im Zweierkomplement-System, signed Integer.Twos Complement ~ 0 signiert

Ist es -1, weil das Spiegeln von 0 1 ist, aber wenn es signiert ist, wäre die Antwort -1? Oder ist die Antwort nur 1 und nur weil ich mit vorzeichenbehafteten Zahlen arbeite bedeutet das nicht, dass es -1 wäre?

+0

Starten Sie [hier] (https://en.wikipedia.org/wiki/Two%27s_complement). – user3386109

Antwort

-1

~0 ist nicht das Zweierkomplement von Null. Es ist die Bit-Inversion von 0, die die gleiche ist wie die des Eins-Komplements.

Wenn Sie das Zweierkomplement in C wollen, müssen Sie -0 (das Minuszeichen beachten) Und -0 nur 0 sein würde

Proof (in eight bit) 
zero    - 0b00000000 
one'e complement - 0b11111111 
Add one   - 0b00000001 (ignoring overflow) 
        ----------- 
Two's complement - 0b00000000 
+0

Ich glaube nicht, dass das OP sagt, dass "~ 0" das Zweierkomplement von "0" ist. OP fragt, was der Dezimalwert von "~ 0" in einem Zweierkomplement-System ist. – kaylum

+0

Ich habe diese Frage auch beantwortet. Wenn Sie das Zweierkomplement als "-0" einrahmen, wird es klarer, dass es tatsächlich 0 ist. –

+0

Also sagen Sie, dass "~ 0" dasselbe ist wie "0"? Die Frage ist nicht, was der Wert von "-0" (minus Null) ist, sondern was der Wert von "~ 0" (bitweise nicht von Null) ist. – kaylum

3

0 a unterzeichnet int (wenn man es wollte wäre nicht signiert, würden Sie schreiben 0U) und daher ~0 ist auch eine signierte int.

Wenn Ihre Maschine eine Zweierkomplement-Darstellung verwendet, hat diese den Wert -1. Die große Mehrheit der Maschinen - möglicherweise alle Maschinen, die Sie jemals in Ihrer Karriere sehen werden - sind Zweierkomplemente, aber technisch gesehen kann ~0 undefiniertes Verhalten hervorrufen, wenn Sie es auf einer Maschine verwenden, die 1'-Komplement-Darstellung von Ganzzahlen mit Vorzeichen verwendet und das verbietet auch negative Nullen.

Auch wenn es nicht wichtig ist, ist es eine gute Idee, sich nur mit vorzeichenlosen Integer-Typen mit bitweisen Operatoren zu beschäftigen.

beachten, dass die Bit-Operatoren „die ganze Zahl Aktionen“ auf ihre Operanden durchzuführen, was bedeutet, dass mit und ohne Vorzeichen short und char werden, um automatisch gefördert int - nichtunsigned int (es sei denn, es kommt vor, dass short die gleiche Breite wie int) - so kann eine explizite Umwandlung in unsigned notwendig sein.

Verwandte Themen