Umrechnung einer negativen Zahl im Datentyp short int.



  • Ich bin mir unsicher was das Rechnen mit den Vorzeichenbehafteten Zahlen angeht.

    Wie lautet Bitdarstellung der Zahl -291 im Datentyp short int

    291 : 2 = 145 Rest: 1
    145 : 2 = 72 Rest: 1
    72 : 2 = 36 Rest: 0
    36 : 2 = 18 Rest: 0
    18 : 2 = 9 Rest: 0
    9 : 2 = 4 Rest: 1
    4 : 2 = 2 Rest: 0
    2 : 2 = 1 Rest: 0
    1 : 2 = 0 Rest: 1

    Resultat: 100100011

    Wäre dann -291 = 1100100011 ?



  • Vorzeichen?



  • Kommt ganz auf die Darstellungsweise an. Da gibt es verschiedene Möglichkeiten.

    Aber normalerweise wird das Zweierkomlement gebildet:

    - höchstes Bit gibt Vorzeichen an
    - restlichen Bits werden negiert
    - +1

    => -291 = 1011011101



  • danke 😎 , aber irgendwie komme ich nicht auf die 10..... ist die null zuviel?

    -291 = 1011011101

    -291 = 11011101

    1. Vorzeichen ignorieren und ins Binärsystem umrechnen: 291(10) = 100100011(2)
    2. Invertieren, da negativ: 011011100
    3. Eins addieren, da negativ: 011011100 + 00000001 = 11011101
    -291(10) = 11011101(2)



  • hmm...vllt. hilfts:

    binärzahlen negieren funktioniert so:

    alle zahlen invertieren und anschließend 1 addieren.



  • MarcR schrieb:

    ...

    Und der nächste Punkt: Beachte dabei die Größe des Datentyps. Selbst wenn 3 die binäre Darstellung "10" hat, so stehen je nach länge des Datentypes noch mehr oder weniger 0en davor.

    cu André



  • da short-INT 16Bit hat wäre die -291

    1. Vorzeichen ignorieren und ins Binärsystem umrechnen: 291(10) = 100100011(2)
    2. Invertieren, da negativ: 011011100
    3. Eins addieren, da negativ: 011011100 + 00000001 = 11011101
    -291(10) = 11011101(2)

    Vorzeichenbit "15tes Bit" / 8-14 Bit auffüllen / 0-7 Bit -291
    [1] / 000000 / 11011101

    -> 1000000011011101

    Kann das Stimmen?



  • Du brauchst nichts auffüllen, beachte einfach die Länge des Datentypen:

    1. Vorzeichen ignorieren und ins Binärsystem umrechnen (und hier schon die Breite beachten): 291(10) = 0000000100100011(2)
    2. Zweierkomplement bilden, da negativ:
    2a. Invertieren: 1111111011011100
    2b. Eins addieren: 1111111011011100 + 1 = 1111111011011101



  • oh, merci 🙂



  • du kannst auch erst im Nachhinein auffüllen, allerdings werden negative Zahlen mit 1 statt mit 0 aufgefüllt


Anmelden zum Antworten