Erweiterung einer Binärzahl auf höhere Bitbreite



  • Tach zusammen,

    ich habe die Dezimalzahl -5 im Zweierkomplement mit einer 4-Bit Breite: 1011.

    Nun möchte ich diese Zahl mithilfe von "sign extension" auf 8-Bit vergrößern. Das Ergebnis sollte so aussehen:

    1111 1011

    Woher weiß ich jetzt noch, welche Zahl das ist? Ich kann nicht mehr auf -5 zurückschließen...

    Danke euch!



  • freakC++ schrieb:

    Tach zusammen,

    ich habe die Dezimalzahl -5 im Zweierkomplement mit einer 4-Bit Breite: 1011.

    Nun möchte ich diese Zahl mithilfe von "sign extension" auf 8-Bit vergrößern. Das Ergebnis sollte so aussehen:

    1111 1011

    Woher weiß ich jetzt noch, welche Zahl das ist? Ich kann nicht mehr auf -5 zurückschließen...

    Danke euch!

    a) 11111011 ist eine negative Zahl, weil das höchste Bit gesetzt ist.
    b) Du invertierst alle Bits (aus 11111011 wird 00000100) und addierst 1, das ergibt dann 00000101, also dezimal 5.
    Aus (a) und (b) folgt, dass 11111011 -5 ist.



  • Mach dem Rechner ein paar Komplimente, eventuell revanchiert er sich.

    Wieviel macht 100h - 5?



  • freakC++ schrieb:

    1111 1011
    Woher weiß ich jetzt noch, welche Zahl das ist? Ich kann nicht mehr auf -5 zurückschließen...

    Ich kanns schon. 
    Einfach den Maschinenbefehl NEG ausführen. 
    
    NEG macht das direkte Komplement (also rechnet 1111 1111 minus die zahl)
    1111 1011
    xxxnegxxx
    0000 0100
    
    und addiert 1 (also addier 0000 00001 drauf(Überlauf fällt wie üblich raus))
    0000 0100
    +1
    0000 0101
    
    Das ist 5. 
    
    Also im Endeffekt 11111111 - x + 00000001 = 11111111+00000001 -x = 00000000 -x = -x
    


  • genau, oder z.B. in debug:

    C:\Users\nachtfeuer>debug
    -h 0 5
    0005  FFFB
    -rax
    AX 0000  :5
    -r
    AX=0005 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
    DS=1B29 ES=1B29 SS=1B29 CS=1B29 IP=0100 NV UP EI PL ZR NA PE NC
    1B29:0100 C3                RET
    -e 200 5
    -d 200
    1B29:0200  05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0210  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0220  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    -rbx 200
    -a
    1B29:0100 neg ax
    1B29:0102 neg byte ptr [bx]
    1B29:0104
    -t
    AX=FFFB BX=0200 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
    DS=1B29 ES=1B29 SS=1B29 CS=1B29 IP=0102 NV UP EI NG NZ AC PO CY
    1B29:0102 F61F              NEG     BYTE PTR [BX]                    DS:0200=05
    -t
    AX=FFFB BX=0200 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
    DS=1B29 ES=1B29 SS=1B29 CS=1B29 IP=0104 NV UP EI NG NZ AC PO CY
    1B29:0104 0000              ADD     [BX+SI],AL                       DS:0200=FB
    -d200
    1B29:0200  FB 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0210  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0220  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    1B29:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    -
    


  • ahh...danke! Aber ohne diesen Algorithmus gehts wohl nichts 🙂


Anmelden zum Antworten