Mr. Einstein: Dezimal - > Binär

Hallo zusammen

Wie kann ich eine Zahl von z.B. -270 ins binäre 2er-Komplement, 8 Bit lang, darstellen?

Jemand hat mir mal gesagt ich könne einfach -270+256 rechnen und anschliessend diese -14 ins Binäre System umrechnen. Stimmt das? Warum?

Gruss Mr. Einstein

  1. Hallo Mr. Einstein,

    (Es ist also offenbar kein Geruecht, dass Albert in Mathematik
    nicht so den durchblick hat... ;-)

    Wie kann ich eine Zahl von z.B. -270 ins binäre 2er-Komplement, 8 Bit lang, darstellen?

    Es kommt darauf an... ;-)
    Mit 8 Bit kann man z.B. den Bereich von 0 .. 255
    oder den von -127 .. +128 abbilden.

    Wovon gehst Du aus?

    Gruesse,

    Thomas

    1. Moin!

      Mit 8 Bit kann man z.B. den Bereich von 0 .. 255
      oder den von -127 .. +128 abbilden.

      Genau genommen ist es der Bereich von -128 bis +127.

      Jedenfalls sind 8 Bit zu klein, um 270 oder -270 darzustellen. :)

      - Sven Rautenberg

      --
      Die SelfHTML-Developer sagen Dankeschön für aktuell 21335,05 Euro Spendengelder!
      1. Hallo,

        Mit 8 Bit kann man z.B. den Bereich von 0 .. 255
        oder den von -127 .. +128 abbilden.

        Genau genommen ist es der Bereich von -128 bis +127.

        Du denkst offenbar an etwas bestimmtes (was?), waehrend ich
        ein paar allgemeine Beispiele erfand... ;-)

        Geradesogut koennte man mit 8 Bit codieren:
        -55 .. 200
        100 .. 355
        u.s.w.

        Jedenfalls sind 8 Bit zu klein, um 270 oder -270 darzustellen. :)

        Da sind wir uns einig. ;-)
        Das war (glaube ich) auch dem OP schon bewusst.

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
        1. Moin!

          Mit 8 Bit kann man z.B. den Bereich von 0 .. 255
          oder den von -127 .. +128 abbilden.

          Genau genommen ist es der Bereich von -128 bis +127.

          Du denkst offenbar an etwas bestimmtes (was?), waehrend ich
          ein paar allgemeine Beispiele erfand... ;-)

          Jaja, du redest dich raus.

          Während man deine Abbildungsvorschrift natürlich nehmen könnte, aber immer eine Umsetzungstabelle, zumindest aber eine Umsetzungsvorschrift benötigt, um damit zu rechnen, hat mein Wertebereich den Vorteil, direkt binäres Rechnen zu erlauben.

          Und da ist 0111 1111 eben als größte positive Zahl die 127 - nicht die 128. Das MSB ist das Vorzeichen.

          Geradesogut koennte man mit 8 Bit codieren:
          -55 .. 200
          100 .. 355
          u.s.w.

          Jedenfalls sind 8 Bit zu klein, um 270 oder -270 darzustellen. :)

          Da sind wir uns einig. ;-)

          Sind wir uns nicht. Wenn du behauptest, man könne mit 8 Bit auch 100..355 codieren, dann kann man auch -335..-100 codieren - folglich auch -270. Nur hat man davon nicht besonders viel.

          Das war (glaube ich) auch dem OP schon bewusst.

          Weiß ich nicht. Er äußert sich ja nicht mehr zum Thema.

          - Sven Rautenberg

          --
          Die SelfHTML-Developer sagen Dankeschön für aktuell 21335,05 Euro Spendengelder!
          1. Hallo,

            Und da ist 0111 1111 eben als größte positive Zahl die 127 - nicht die 128. Das MSB ist das Vorzeichen.

            Das leuchtet ein. Danke.

            Sind wir uns nicht. Wenn du behauptest, man könne mit 8 Bit auch 100..355 codieren, dann kann man auch -335..-100 codieren - folglich auch -270. Nur hat man davon nicht besonders viel.

            Shit, Du hast mich erwischt. ;-)
            Diesen Widerspruch hatte ich natuerlich erst bemerkt,
            _nachdem_ ich "Nachricht absenden" geklickt hatte...

            Weiß ich nicht. Er äußert sich ja nicht mehr zum Thema.

            Er hat sich nochmal geaeussert ([pref:t=69671&m=400832]),
            allerdings ohne zu sagen, wie er die Zahlen abbildet...

            Freundlich-friedfertige Gruesse ;-)

            Thomas

    2. Hallo Mr. Thomas

      Die Aufgabe ist die, dass ich zum Beispiel das ausrechnen sollte:
      -240 - 230 = ? Binär

      (Da müsste man ja -240 + (-230) rechnen da es ja die subtraktion nicht gibt.)

      Also, gibt Dezimal sage und schreibe -470...und nun muss ich das noch Binär darstellen.

      Gruss Mr. Einstein.

      1. Moin!

        Die Aufgabe ist die, dass ich zum Beispiel das ausrechnen sollte:
        -240 - 230 = ? Binär

        (Da müsste man ja -240 + (-230) rechnen da es ja die subtraktion nicht gibt.)

        Vielleicht solltest du, nur um warm zu werden, erstmal mit einer kleineren Zahl anfangen:

        -2 minus 3 (da soll -5 rauskommen).

        Man kann simpel von Null runterzählen (machen wir mal nur in 4 Bit - geht ja auch):

        0000 = 0
        1111 = -1
        1110 = -2

        Und die 3 ist simpel:
        0011 = 3

        Subtraktion zweier binärer Zahlen funktioniert, indem man das Zweierkomplement der zweiten Zahl bildet, addiert, und noch 1 addiert.

        Zweierkomplement: Alle Bits invertieren:
        1100 = !3

        Addieren:
          1110

        • 1100
          +    1
          ------
           11011

        Das überschüssige Bit muß sein, das zeigt "keinen Überlauf" bei der Rechnung an.

        Und das Ergebnis ist:
         1011 = -5 (soll so sein. Mal abzählen...)
         1100 = -4
         1101 = -3
         1110 = -2
         1111 = -1
         0000 =  0

        Stimmt.

        Wenn du jetzt "-240 - 230" rechnen sollst, brauchst du ganz dringend viele Bits vorne vor (8 Stück reichen da nicht wirklich, sonst gibts einen Register-Überlauf), um korrekte Ergebnisse zu erhalten. Oder du hast eben tatsächlich den Überlauf, und kriegst ein abgeschnittenes Ergebnis raus. Der 6502/6510-Mikroprozessor konnte ja, obwohl er nur ein 8 Bit Rechner war, trotzdem längere Zahlen berechnen. Ist eben alles eine Frage von Carry- und Overflow-Flag.

        - Sven Rautenberg

        --
        Die SelfHTML-Developer sagen Dankeschön für aktuell 21335,05 Euro Spendengelder!
        1. Hallo Sven!

          Der 6502/6510-Mikroprozessor konnte ja, obwohl er nur ein 8 Bit Rechner war, trotzdem längere Zahlen berechnen. Ist eben alles eine Frage von Carry- und Overflow-Flag.

          Oh welch romantisch-nostalgische Wohltat, dass sich noch jemand an dieses gute Stück erinnert! *schwärm*
          Der konnte in der Tat viel, viel mehr als die meisten ihm zugetraut hatten. Ich habe Mitte der 90er bei einer Firma gearbeitet, die kundenspezifische (und zugegebenermaßen "exotische") Steuerungen für Industrieanlagen gemacht hat. Und soweit ich informiert bin, setzen die bis heute noch gelegentlich 6502-basierte Systeme ein.

          Verschlafene Grüße aus dem Murrtal

          Martin

          --
          Ich stehe eigentlich gern früh auf.
          Außer morgens.
  2. Hallo zusammen

    Also nocheinmal, hab mich da genauer informiert. Gegeben(2er Kompl. Binär): 1111 1110 und 1111 0100! Diese Zahlen muss ich addieren und ins Dezimalsystem umrechnen. Dabei erhalte ich einen 9 Bit Code. Jemand hat mir gesagt ich könne dann einfach die vorderste 1 streichen und erhalte somit wieder einen 8 Bit Code, also: 1111 0010. Warum kann man das?

    Gruss Mr. Einstein

    1. ..verlangt ist das Resultat in 8Bit 2er Kompl. Darstellung.

    2. Hallo,

      Also nocheinmal, hab mich da genauer informiert. Gegeben(2er Kompl. Binär): 1111 1110 und 1111 0100! Diese Zahlen muss ich addieren und ins Dezimalsystem umrechnen. Dabei erhalte ich einen 9 Bit Code. Jemand hat mir gesagt ich könne dann einfach die vorderste 1 streichen und erhalte somit wieder einen 8 Bit Code, also: 1111 0010. Warum kann man das?

      Weil daran, dass mit 2er Komplement addiert wird, zu erkennen ist, dass es sich um eine Subtraktion handelt. Bei einer Subtraktion ist ein positiver Überlauf nicht möglich.

      Bsp:
      12 - 2 = 12 + (-2) = 10

      1100 - (0010 => 2er Kompl. 1110)

      1100
      +   1110
      Üb. 1
      --------
       (1)1010
        ^kein Überlauf

      Du sollst rechnen:

      1111 1110 ( -2)
      +   1111 0100 (-12)
      Üb. 1111 1
      -------------------
       (1)1111 0010 (-14)
        ^kein Überlauf

      viele Grüße

      Axel

      1. Hallo,

        Kleine Korrektur. Bei zwei negativen Zahlen kann es natürlich einen Überlauf geben. Allerdings ist dann das Ergebnis natürlich auch wieder ein 2er Komplement. Dort zeigt eine 1 an höchster Stelle nur an, dass die Zahl negativ ist.

        1111 1110 ( -2)
         +   1111 0100 (-12)
         Üb. 1111 1
         -------------------
            11111 0010 (-14)

        Umwandeln von 2er-Komplement in absoluten Wert:
        abs Wert = !(2erKompl. - 1)

        11111 0010
        (-1)11111 1111
        Üb. 11111 11
        --------------
           111111 0001
        --------------
        (!)000000 1110 (14)

        viele Grüße

        Axel