Forum: Mikrocontroller und Digitale Elektronik Division im Binärsystem


von Raphael (Gast)


Lesenswert?

Hallo zusammen,
ich habe folgende Frage:

Kann mir jemand erklären nach welchem Prinzip eine CPU eine Division
durchführt. Addition, Substraktion und Multiplikation sind mir klar,
aber wie das beim dividieren funktionieren soll?
Vielleicht kenn ja auch jemand einen Link zu einer Seite auf der so
etwas erklärt wird, wenns geht bitte Deutsch (bin erst 13 und mein
Englisch ist noch ned so perfekt :-) )

MfG Raphael

von A.K. (Gast)


Lesenswert?

Exakt genauso wie Du die schriftliche Division mit Papier und Bleistift
durchführst. Nur eben im Binärsystem statt im Dezimalsystem.

von Santa Klaus (Gast)


Lesenswert?

Hallo Raphael,

Die Division läuft genau so ab, wie Du das in der Schule gelernt hast,
bloß im Zweiersystem.  Auf der Atmel-Homepage http: www.atmel.com gibt
es zu den AVR-Controllern eine application note mit Divisionroutinen
(für einfachere Controller, die das nicht per Hardware können) nebst
einigen Erklärungen dazu.  Ist allerdings alles auf englisch.  Kannst
Dich ja trotzdem durchquälen (denk einfach daran, daß Dein Englisch
dadurch immer besser wird!).

von A.K. (Gast)


Lesenswert?


von Raphael (Gast)


Lesenswert?

Kann ich das auch mit multiplikation machen?
Ich habe nämlich gerade einfach die 2 Operanden multipliziert und dann
entspricht bei mir das Ergebniss immer der Anzahl der Bits vom MSB aus
gemessen, wie die länge der Zahl durch die dividiert wird, oder ist das
Zufall?

Beispiel  36/6=6 :

  100100        (=36)
     110        (*6)
11011000        (=216)
---
110             (=6)

Kann man das so Rechnen?

Würde mich über Hilfe sehr freuen!
Gruß Raphael

von Raphael (Gast)


Lesenswert?

Sorry, stimmt nicht!

von Rolf Magnus (Gast)


Lesenswert?

Wenn du durch einen festen Wert dividieren willst, kannst du es
natürlich auch als Multiplikation mit dem Kehrwert machen.

von A.K. (Gast)


Lesenswert?

Bei Fliesskommarechung kann man eine Division durch Multiplikation mit
dem Kehrwert ersetzen. Bei ganzzahliger Rechnung ist das nicht so ohne
weiteres möglich.

Das bringt einen aber nur weiter, wenn der Nenner konstant ist.

von Raphael (Gast)


Angehängte Dateien:

Lesenswert?

Hab mir die App Note von Atmel mal angeschaut, aber hab mal Fragen
dazu:

Hab mal ein Bild vom Programmablauf angehängt.
Der Text dazu lautet so:

1)Clear remainder and carry
2)Load loop counter with 17
3)Shift left dividend into carry
4)Decrement loop counter
5)If loop counter=0, return
6)Shift left carry (from dividend/result) into remainder
7)Substract divisor from remainder
8)If result negativ, add back divisor, clear carry and goto step 3
9)Set carry and goto step 3

Fragen:
1) Bedeutet Schritt 3 dass ich das MSB ins Carry schieben soll, oder
das das Carry ins LSB kommen soll? Selbe frage bei Schritt 6

2) In dem ganzen Ablauf wird das Result garnicht erwähnt, außer bei
Schritt 6. Wie soll darin dann das Ergebniss stehen, wenn nur der Rest
(Remainder) benutzt wird?

Irgendwie steht mir da jemand auf der Leitung
Gruß Raphael

von A.K. (Gast)


Lesenswert?

Falsche Sprache, aber noch einfacher geht's nicht:
http://courses.cs.vt.edu/~cs1104/BuildingBlocks/divide.030.html
Besonders unter "Further Example".

von Raphael (Gast)


Lesenswert?

Danke für den Link, jetzt hab ich verstanden!!
Gruß Raphael

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.