Forum: Offtopic 2er-komplement


von Reiko (Gast)


Lesenswert?

Hi Leutz.

Ich habe Probleme mit dem 2er-Komplement der Zahl 9A(hex). Ich lese
gerade ein Assembler-Buch, in dem es um Konvertierung von 8-Bit Zahlen
in 16-Bit geht und vor allem um das Auffüllen des höherwertigen
Byte des 16-Bit-Registers.

Es gibt folgende Tabelle, die negative und positive Zahlen enthält:


8-Bit   16-Bit   32-Bit
 80h     FF80h    FFFFFF80h
 28h     0028h    00000028h
 9Ah     FF9Ah    FFFFFF9Ah
 7Fh     007Fh    0000007Fh
 –––     1020h    00001020h
 –––     8088h    FFFF8088h


Frage: Wieso wird die Zahl 9A als negative Zahl aufgefasst und das
höherwertige Byte im 16-Bit-Register folglich mit "F" aufgefüllt?

Eigentlich kann es die Zahl 9A in einem 8-Biter gar nicht geben, wenn
man negative Zahlen betrachtet, oder?

Kann mir jemand noch vielleicht ankreuzen, welche der Zahlen positiv
sind und welche negativ?

Danke

von OldBug (Gast)


Lesenswert?

Hi!

0x9A ist deshalb negativ, weil das Höchstwertigste Bit gesetzt ist
(10011010 = "-26" dezimal). Dieses eine Bit macht den Unterschied
zwischen positiven und pegativen Werten bei vorzeichenbehafteten
Variablen aus.

0x80 ist demnach "+0" dezimal :-)

Gruß,
Patrick...

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Patrick

0x80 = -128 und nicht 0. Frag mal deinen Taschenrechner

Dezimal -128 eintippen und in hex umwandeln

Gruß
Gerhard

von Reiko (Gast)


Lesenswert?

Danke fuer die schnelle Antwort.

Erst einmal etwas zur 0. Da muß ich Gerhard Recht geben, denn laut
meiner Rechnug und laut Buch wäre:
80h = 10 00 00 00b = 10 00 00 00(2er-Komplement) mit anderen Worten

-(128) = 128
und an dieser Stelle sagt das Buch, muesste eine Exception auftreten,
da der maximale Wertebereich mit +128 mit 2hoch7
ueberschritten waere. Somit kann 80h nicht gleich 0d sein?!
Wer hat Recht?


Ich glaube der Groschen ist bei mir gefallen. Allerdings gibt es noch
folgende Unsicherheit:

Aus euren Ausfuehrungen geht nun fuer mich hervor, dass die Zahlen in
der Tabelle schon das 2er-Komplenent darstellen, dh. ich muß sie nur
noch in die binaere Form bringen und dann so wie sie dann da stehen als
negative Zahl interpretieren???

28h = 00101000(2-er Komp) = 40d    richtig?

Ist dann 9Ah = -102d ?


Aber normalerweise, wenn man im Register ein Bitmuster vorfindet, dann
kann man doch nicht sagen, ob es sich um eine positive oder negative
Zahl handelt. Dass kann man doch nur aus dem Kontext heraus erkennen,
oder?

Reiko

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Reiko

das ist tatsächlich so.

Also deine Zahlenbeispiele stimmen. Und ob eine Zahl positiv oder
negativ ist (wenn das MSB = 1 ) ist reine Interpretationssache.
Genauergesagt muß man korrigierend eingreifen. Ein Mikroprozessor
rechnet normal immer nur mit positiven Zahlen.

Gruß
Gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.