Dual in Dezimal und Zweierkomplement



  • Hi Leute!

    Ich möchte (wie gestern) ein bisschen Umrechnen.

    Mir ist die Dualzahl 1100010010 gegeben und möchte davon "Vorzeichen bzw. Betrag" bestimmen und zwar in der Dezimalzahl. Ich interpretiere hier nun das 10.Bit als Vorzeichenbit und rechne dann so um:

    -(2^8 + 2^4 + 2^1) = -274
    

    Das sollte soweit stimmen.

    Wie aber siehts jetzt mit dem Zweierkomplement aus?

    Da bestimme ich nun von der gegebenen Zahl das Zweierkomplement und rechne es dann in die Dezimalzahl um:

    1100010010
    
      0011101101
    +          1
    ------------
      0011101110
    
    2^7 + 2^6 + 2^5 + 2^3 + 2^2 + 2^1 = 238
    

    Stimmt das so? Ich nehme von einer Minuszahl das Zweierkomplement und dadurch wird daraus plus?

    Oder ist das höchstwertigste Bit zugleich Vorzeichen und eine mit zu berechnende Stelle? Da komm ich immer durcheinander...

    Ich mein das so:

    0011101110
        ^
        |
       Ist hier Bit 2^7 also fließt es in die oben gezeigte Rechnung mit ein und da es zugleich die höchstwertigste 1 dieser Dualzahl ist, ist sie auch zugleich das Vorzeichen der Dezimalzahl...
    

    Wenn nun das zweite stimmen sollte, dann wäre es ja -238...



  • Deine Rechnung stimmt, die Binärzahl im Zweierkomplement entspricht -238 (negativ).

    Ich versuche dir mal eine andere Erklärung des Zweierkomplements zu geben. Vielleicht verstehst du dann wie das funktioniert (irgendwie scheinst du immer noch etwas verwirrt).

    Beispiel für 4 Bits. Normalerweise haben die Stellen im Binärsystem die Werte
    8 4 2 1

    also ist z.B. 1011b=1*8+0*4+1*2+1*1=9(Dez).
    Beim Zweierkomplement ist die höchste Stelle negativ, also sind die Werte
    -8 4 2 1
    Das heisst wenn du 1011 als Zweierkomplement Darstellung interpretierst erhältst du

    -8*1+0*4+1*2+1*1=-8+3=-5.

    Damit kannst du auch den Wertebereich (Frage aus dem letzten Thread) einfach bestimmen. Die grösste Zahl ist 0111=7, die kleinste 1000=-8.

    Für dein Beispiel:
    1100010010 im Zweierkomplement

    -210+29+24+21=-512+256+16+2=-238

    Was du gemacht hast ist auch korrekt. "Das Zweierkoplement von x berechnen" heisst, dass du die Zahl negierst. Dein Vorgehen war:
    - Ich habe eine negative Zahl (1100010010) und weiss nicht, wie ich die umrechnen kann.
    - Ich berechne das Zweierkomplement dieser Zahl (berechne also -x): 0011101110. Das ist positiv und deshalb kann ich es wie gewohnt ins Dezimalsystem übertragen.
    - Ich wandle die Zahl ins Dezimalsystem um: 238. Das ist also -x. Dann war meine ursprüngliche Zahl -238.

    Das ist jetzt GANZ ausführlich. Du kannst beide Wege benützen, hoffentlich ist es dir jetzt klar, wie das mit dem + und - funktioniert.

    Edit: Das steht alles auch auf Wikipedia. Das nächste mal einfach vorher mal nachlesen.



  • Ich berechne das Zweierkomplement dieser Zahl (berechne also -x): 0011101110. Das ist positiv und deshalb kann ich es wie gewohnt ins Dezimalsystem übertragen.

    Diese Zahl ist doch deshalb positiv weil, das höchstwertigste Bit eine 0 hat, oder? Wenn dieses Bit eine 1 wäre, also 1011101110, dann wäre es nagativ. Stimmt das so?



  • bandchef schrieb:

    Diese Zahl ist doch deshalb positiv weil, das höchstwertigste Bit eine 0 hat, oder? Wenn dieses Bit eine 1 wäre, also 1011101110, dann wäre es nagativ. Stimmt das so?

    Ja. Aber 1011101110b ist nicht die negative Zahl von 0011101110b.

    Noch ein Versuch, das Zweierkomplement zu verstehen (eine Übungsaufgabe für dich):

    Wandle die dezimalen Zahlen x1=-12 und x2=12 in Binärzahlen mit 5 Bit um (am besten in beiden Darstellungen für das Vorzeichen). Jetzt überlege mal, wie man im Binärsystem jeweils x1+x2 ausrechnen kann.



  • x1 mit Vorzeichen: 11100
    x1 im Zweikomplement: 10100

    x2 mit Vorzeichen: 01100
    x2 im Zweikomplement: 01100

    x1 + x2:

    Hier kann ich doch jetzt x1 mit Vorzeichen und x2 mit Vorzeichen einfach addieren, oder?

    Das sieht dann so aus:

    11100
    + 01100
     111
    -------
     101000
    

    Der letzte Übertrag wird nun ignoriert. Ich hab dann als Ergebnis 01000.

    Irgendwas stimmt da aber jetzt nicht, oder?

    Edit:

    Jetzt hab ich glaub ichs raus:

    Ich nehme von x2 die Darstellung irgendeine Darstellung (is ja egal weil beide gleich sind) und addiere zu x2 die Zweikomplementdarstellung von x1. Sieht so aus:

    01100
    + 10100
     111
    -------
     100000
    

    Der letzte Übertrag wird ignoriert (Überlauf) und voila ich hab 00000 = 0.



  • Ich hab jetzt hier mal die Übersicht von 4-Bit-Zahlen gemacht und den "normalen Bereich" dem Zweikomplement gegenübergestellt.

    "norm. Bereich"          "Zweikomplement"
    0000       0                          0
    0001       1                          1
    0010       2                          2
    0011       3                          3
    0100       4                          4
    0101       5                          5
    0110       6                          6
    0111       7                          7
    1000       8                         -8
    1001       9                         -7
    1010      10                         -6
    1011      11                         -5
    1100      12                         -4
    1101      13                         -3
    1110      14                         -2
    1111      15                         -1
    

    Hier sieht man jetzt wirklich schön, dass es nur eine einzige Darstellung der "0" gibt. Auch schön sieht man die höchste bzw. niedrigste Zahl. Hier von +7 bis -8.

    Ich hoffe, dass das jetzt auch richtig ist!

    Edit: Nochmal:

    Die -8 unter der Spalte "Zweikomplement" kommt zustande, weil 1000 an der höchstwertigen Stelle eine 1 hat. Diese 1 bedeutet, dass es negativ ist und zugleich der Betrag der Dezimal sich dann so berechnet: 2^3 = 8. Die Zahl -3 berechnet sich doch dann so: -2^3 + 2^2 + 2^0 = -3. Richtig?


Anmelden zum Antworten