mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Binär Division


Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mir gerade mal die Division von Binärzahlen auf Wikipedia 
angeschaut. Dort gibt es folgendes Beispiel:
Leider verstehe ich das nicht so ganz. Kann mir das bitte einer 
verständlich erklären?


    1000010 ÷ 11 = 010110 Rest 0 (= 22 im Dezimalsystem)
  − 011
  —————
    00100
    − 011
     ————
      0011
     − 011
     —————
        000
      − 00
        ———
          0

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist exakt das selbe Prinzip wie mit Dezimalzahlen, was man im 3. 
Schuljahr lernte. Sieht optisch genau so aus, und funktioniert auch 
genau so. Bis auf die Tatsache, daß man sich an das Zahlensystem 
gewöhnen muß.

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja nur das man eben nicht so schnell sieht, welche Zahl man durch welche 
teilen kann. Da gab es auch irgendwelche Trick. Das ganze auf 
Subtraktion zurückzuführen. Und wenn das Ergebnis negativ war musste 
glaube ne 0 hin und dann musste korrigiert werden. ich wies eben nur 
nicht mehr, wie das ging.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die führende Null beim Ergebnis verwirrt womöglich nur unnötig.

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Division ist eine erweiterte Subtraktion.

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist auch so nen Beispiel mit dem <0 >0. Aber ich weis nicht mal, 
was ich da von was subtrahieren muss.

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Beispiel von der Uni konnte ich nun nachvollziehen. Nur nach 
der Methode komme ich mit dem Beispiel aus Wiki nicht zurecht:

  1000010 ÷ 11 = 0
 -11
 ———
 101
+011
 ———
1000

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht genau wie beim schriftlichen Dividieren. Mit dem Unterschied : 
Durch Zwei muss man nie teilen, nur subtrahieren oder auch nicht. 
Weshalb ? Wenn du das begreifst ...

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dividierer schrieb:
> 1000010 ÷ 11 = 0
>  -11
>  ———
>  101
> +011
>  ———
> 1000

So ungefähr verstehe ich das Prinzip ja jetzt. Nur weiß ich nicht, was 
ich in dem Beispiel falsch gemacht habe.

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder kannst Du abziehen oder nicht (weil der Rest <0 wäre)
Wenn Du abziehen kannst, notierst Du eine 1 im Ergebniss, wenn nicht 
eine 0
Dann schiebst Du den Divisor nach rechts und wiederholst das Ganze.
Vorher solltest Du den Divisor durch entsprechendes linksschieben auf 
ein Maximum bringen. Dies muss natürlich auch im Quotienten 
berücksichtigt werden.

Beispiel: 120 / 10 = 12

 01111000 / 00001010 = 1100

-> Divisor um 4 nach links (maximum / MSB = 1)

 01111000 / 10100000
-10100000   -> 0
 ========
 01111000

-> Divisor um 1 nach rechts

 01111000 / 01010000
-01010000   -> 1
 ========
 00101000

-> Divisor um 1 nach rechts

 00101000 / 00101000
-00101000   -> 1
 ========
 00000000

-> Divisor um 1 nach rechts

 00000000 / 00010100
-00010100   -> 0

-> Divisor um 1 nach rechts (ursprünglicher Zustand erreicht)

 00000000 / 00001010
-00001010   -> 0


Ergebnis: 01100 - kann noch vorne mit 0en aufgefüllt werden


Gruß

Jobst

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jobst M. schrieb:
> Entweder kannst Du abziehen oder nicht (weil der Rest <0 wäre)
> Wenn Du abziehen kannst, notierst Du eine 1 im Ergebniss, wenn nicht
> eine 0
> Dann schiebst Du den Divisor nach rechts und wiederholst das Ganze.
> Vorher solltest Du den Divisor durch entsprechendes linksschieben auf
> ein Maximum bringen. Dies muss natürlich auch im Quotienten
> berücksichtigt werden.

Danke mit der Methode komme ich besser zurecht. Ich habe damit das 
Beispiel von Wiki durchrechnen können. Nur wie sehe ich da, ob ich einen 
Rest habe oder nicht?

im Vorletzten Schritt:

 0000110
-0000110
--------
 0000000 ->1

 0000000
-0000011 ->0

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Rest ist das, was nach der letzten Subtraktion über bleibt.
Also das, was kleiner als der Divisor ist.

Beispiel:

7 / 6 = 1 Rest 1

 111 / 110
-110  -> 1
 ===
 001  -> Rest


Gruß

Jobst

Autor: Dividierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut danke. Wie sieht es dann mit Nachkommastellen aus?

101/11=01

 101
-110
----
 101
-011
----
 010 <-- Da dürfte ja jetzt der Rest sein.

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du einen Rest hast, gibt es natürlich auch Nachkommastellen. Da 
wird die Division dann einfach immer weiter fort geführt, in dem man an 
den Rest eine 0 anhängt und weiter teilt. Genau wie mit dezimalen 
Zahlen.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dividierer schrieb:010110 Rest 0 (= 22 im Dezimalsystem)
     1000010 ÷ 11 = 
Wie oft geht die 11 in die 10? Jo, Null mal. Null notieren, 0x11 
drunterschreiben, abziehen, nächste Stelle herunternehmen.
     1000010 ÷ 11 = 0
   −  0
   —————
     100
Wie oft geht die 11 in die 11? Genau, einmal. Eins notieren, 1x11 
drunterschreiben, abziehen, nächste Stelle runterholen.
     1000010 ÷ 11 = 01
   −  0
   —————
     100
   −  11
   ——————
       10
Wie oft geht die 11 in die 10? Siehe oben: Null notieren, abziehen, 
nächste Stelle.
     1000010 ÷ 11 = 010
   −  0
   —————
     100
   −  11
   ——————
       10
     −  0
     —————
       100
Und? Siehe oben, einmal.
     1000010 ÷ 11 = 0101
   −  0
   —————
     100
   −  11
   ——————
       10
     −  0
     —————
       100
     −  11
     ——————
         11
Nun? 11 geht einmal in die 11, also Eins notieren und weiter:
     1000010 ÷ 11 = 01011
   −  0
   —————
     100
   −  11
   ——————
       10
     −  0
     —————
       100
     −  11
     ——————
         11
       − 11
       —————
          00   <-- nicht aufhören, es kam noch ne Stelle runter!
Und nochmal, nullmal gehts.
     1000010 ÷ 11 = 010110
   −  0
   —————
     100
   −  11
   ——————
       10
     −  0
     —————
       100
     −  11
     ——————
         11
       − 11
       —————
          00   <-- nicht aufhören, es kam noch ne Stelle runter!
        −  0
        —————
           0   <-- Jetzt ists wirklich der Rest 0 -> Stop.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.