Multiplikation mit Zweierkomplement von Komma- und Integerzahlen

Gast #5523261
Lesenswert?

Hallo,

während einer Projektarbeit bin ich auf folgendes Problem gestoßen: 
innerhalb der Beschreibung eines Algorithmus, der Grundlage für einen 
ASIC ist, wollte ich verschiedene Rechenvorgänge eines Multiplizierers 
auswerten. Dafür habe ich vorab die Ergebnisse per Hand berechnet.

Einfaches Beispiel: 2*(-0,5)=(-1) in binärer Schreibweise. Dafür habe 
ich die negative Zahl in das Zweierkomplement übersetzt und habe 
anschließend schriftlich multipliziert. Das grundsätzliche Zahlenformat 
sollte zunächst aus 5bit bestehen. Ein Vorzeichenbit sowie jeweils zwei 
Bit für Vor- und Nachkommastellen --> 2=01000 und -0,5=10010. Am Ende 
der Rechnung kam leider keine (-1) heraus und da stellte sich mir die 
Frage warum. Hat jemand eine Idee, warum ich Komma- und Integerzahlen 
unterschiedlichen Vorzeichens nicht einfach miteinander schriftlich 
multiplizieren kann? Mache ich hierbei etwas grundlegend falsch? Für 
Hinweise und Bemerkungen bin ich sehr dankbar!
Gast #5523388
Lesenswert?

> Ein Vorzeichenbit sowie jeweils zwei Bit für Vor- und
> Nachkommastellen --> 2=01000 und -0,5=10010. Am Ende
> der Rechnung kam leider keine (-1) heraus

Dann zeig doch mal deine Rechnung.

Btw, die Kodierung für -0.5 ist kein Zweierkomplement.
Gast #5523477
Lesenswert?

Richtig, die (-0,5) ist noch nicht als Zweierkomplement dargestellt. 0,5 
wären nach dem zugrundeliegenden Schema 00010. Invertieren (11101) und 
eins addieren ergibt (1)1110. Mit der Vorzeichenerweiterung folgt:

  0000000010*1111111110
  _______________
         0000000000
         0000000100
         0000001000
         0000010000
         0000100000
         0001000000
         0010000000
  -----------------
         0011111100

Hierbei müssten nun die letzten vier Stellen für das Komma reserviert 
sein, sprich 1100, was anhand des Schemas eine 0,75 wäre. Das stimmt ja 
bekanntlich nicht. Wo ist der Denkfehler?
Gast #5523516
Lesenswert?

> Wo ist der Denkfehler?

Du hast 0.5 * -0.5 gerechnet. Das Ergebnis (1111111100) ist negativ, 
negieren ergibt 0000000100 = 0.25, also korrekte -0.25.

Falls der linke Multiplikant ganzzahlig sein sollte (also Wert 2), hat 
das Ergebnis nur zwei Nachkommastellen und damit ebenfalls korrekte -1.
Gast #5523740
Lesenswert?

Da habe ich wohl nicht mehr ganz mitgedacht, danke für die Korrektur. 
Den Ausdruck 2*(-0,5) habe ich nochmal neu berechnet, jetzt stimmt 
alles. Mein Fehler lag darin, dass ich im Ergebnis nach dem Invertieren 
ein Vorzeichenbit erwartet habe. Aber da das Ergebnis ja im 
Zweierkomplement steht, kommt nach der Invertierung natürlich das 
positive Gegenstück bei heraus.

Nun ist alles klar, vielen Dank für die Hilfe!
Persönliche Seite #5527100
Lesenswert?

Negieren und Invertieren sind auf BItebene etwas anderes, als in 
Dezimalschreibweise. Das liegt eben an der Darstellung negierter Zahlen 
im Zweierkomplement. Bei diesem komplettiert der Gegenwert immer zu 
einer Binärzahl 2,4,8,16 ... und 256. Eine bitweise Invertierung liefert 
das Komplement zur jeweiligen Zahl-1, also führt 0 zu einer 255 bei 8 
bit.

Damit kann man auch rechnen, aber eben nicht im Zweierkomplement.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren