Forum: Mikrocontroller und Digitale Elektronik Binär Division


von Dividierer (Gast)


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

von Wilhelm F. (Gast)


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ß.

von Dividierer (Gast)


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.

von Mark B. (markbrandis)


Lesenswert?

Die führende Null beim Ergebnis verwirrt womöglich nur unnötig.

von Wilhelm F. (Gast)


Lesenswert?

Die Division ist eine erweiterte Subtraktion.

von Dividierer (Gast)


Lesenswert?

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

von Dividierer (Gast)


Lesenswert?


von Dividierer (Gast)


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

von Purzel H. (hacky)


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 ...

von Dividierer (Gast)


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.

von Jobst M. (jobstens-de)


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

von Dividierer (Gast)


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

von Jobst M. (jobstens-de)


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

von Dividierer (Gast)


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.

von Wilhelm F. (Gast)


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.

von Sven P. (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.