Komplement
-
Hallo! Hab mal ne Frage zu diesem Code:
short int z=0x2c;
short int erg=0;printf("Wert (Hex) = %hx Wert (dez) = %hd \n", z, z);
erg=~z;
printf("Wert (Hex) = %hx Wert (dez) = %hd \n", erg, erg);Ich bekomme für das Komplement von z einen dezimalen Wert von -45 ausgegeben. Wenn ich das ganze per Hand rechne komme ich auf 19. Wie entsteht dieser Fehler? Könnt ihr mir helfen?
-
Du hast bei deiner Berechnung wohl nicht berücksichtigt, dass die Zahl 16 binäre Stellen und ein Vorzeichen hat.
Schau dazu auch mal hier:
http://de.wikipedia.org/wiki/Zweierkomplement
-
Wie kommst Du denn auf die 19?
(Von Zweierkomplement war bisher nicht die Rede und das wird oben auch nicht berechnet
)
-
Wenn man davon ausgeht, dass es sich um 6-stellige Binärzahlen handelt, dann wäre das Ergebnis durchaus 19.
-
Stimmt. Ich habs jetzt mit 8 oder 16 durchgerechnet, auf 6 bin ich nicht gekommen - wohl aufgrund der Ungewöhnlichkeit solcher Busbreiten

-
versteh ich nicht ganz...
für mich ist 2c (hex) = 44 (dez) = 101100 (dual)
das ganze negieren gibt 010011 (dual) = 19 (dez) und eben nicht -45 (dez)
-
2C (hex) -> 0000000000101100 (dual)
Komplement: 1111111111010011 (dual) = -45 (dez)
-
Eben. Woher soll der Rechner denn wissen wieviele Bits (von den 16, die ein short nunmal auf den gängigen Plattformen hat) Du negiert haben möchtest?
-
Nanyuki schrieb:
2C (hex) -> 0000000000101100 (dual)
Komplement: 1111111111010011 (dual) = -45 (dez)ok, wie komm ich denn von dem komplement auf -45?
ich ziehe von dem komplement dual 1 ab und inverteire wieder =
101101 (dual) = -90
Sry, wenn ich mich etwas schwer tue
-
101101 ist 45 (1+4+8+32)