Fixkommadarstellung addition < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Hallo!
(Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.)
Ich bastle gerade an einem Microcontroller rum stehe ehrlich gesagt etwas auf dem schlauch - weil ich offensichtlich alle regeln der binären addition vergessen habe.
also ich habe folgendes zahlenformat:
(von links nach rechts)
1 bit Vorzeichen
3 bit Dezimalstellen
28 bit Nachkommastellen
10000011001100110011001100110100 => -0.4
10000010011001100110011001101000 => -0.8
da meine werte bei den ganzen berechnungen niemals größer als 5.* werden sollen, habe ich mich für diese 3 bit entschieden - werden zahlen gegebenfalls größer, werden sie in einem früheren schritt, getrimmt.
Also, ich arbeite nun im 2er Komplement ->
ich muss nun also die erste Zahl (-0.4) invertieren und 1 dazuzählen (1'Komplememt)
=>
10000011001100110011001100110100 = -0.4
01111100110011001100110011001100 = 0.4
10000010011001100110011001101000 = -0.8
01111101100110011001100110011000 = 0.8
Nun beide 1er Komplemente addieren
01111100110011001100110011001100
01111101100110011001100110011000
---------------------------------------------------
11111010011001100110011001100100
Negativ ist sie ja, aber 111 (die 3 Dezimalbits) sollten wohl eher 1 darstellen als 7....
was mache ich hier falsch?
ich hoffe ich konnte mein problem gut beschreiben
bitte keine links oder ähnliches, ich quäle mich schon den halben nachmittag durch diverse Internetseiten aber finde den Fehler nicht :)
lg
david
|
|
|
|
Hallo!
> Hallo!
>
> (Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.)
>
> Ich bastle gerade an einem Microcontroller rum stehe
> ehrlich gesagt etwas auf dem schlauch - weil ich
> offensichtlich alle regeln der binären addition vergessen
> habe.
>
> also ich habe folgendes zahlenformat:
>
> (von links nach rechts)
> 1 bit Vorzeichen
> 3 bit Dezimalstellen
> 28 bit Nachkommastellen
>
> 10000011001100110011001100110100 => -0.4
> 10000010011001100110011001101000 => -0.8
Sollen das jetzt schon die Zahlen im Zweierkomplement sein?
Oder in deiner eigenen Darstellung?
Im Zweierkomplement würden die angegebenen Bits jedenfalls nicht den angegebenen Dezimalzahlen entsprechen.
Im Übrigen kommst du nicht von den negativen Zahlen in der Darstellung des Zweierkomplements wieder zu ihren positiven Partnern, indem du nochmal das Zweierkomplement berechnest.
0.4 normal dargestellt in deinem Zahlensystem (ein bisschen verkürzt):
0 000 0110011
Zweierkomplement:
1 111 1001100
Plus "1":
1 111 1001101 = -0.4
============
0.8:
0 000 1100110
Zweierkomplement:
-0.8:
1 111 0011001
Plus "1":
1 111 0011010 = -0.8
============
Nun Addition der beiden negativen Zahlen:
1 111 1001101
1 111 0011010
---------------------
1 110 1100111
Zugehörige positive Zahl bestimmen:
Minus "1":
1 110 1100110
Zweierkomplement Rückwärts:
0 001 0011001
= [mm] 1*2^{0} [/mm] + [mm] 1*2^{-3}+1*2^{-4} [/mm] + [mm] 1*2^{-7} \approx [/mm] 1.195312500
Grüße,
Stefan
|
|
|
|