Noch Fragen zu Binär in BCD

Gast #360086
Lesenswert?

Hallo an alle

Ich habe schon dieses Forum durchsucht und mir die Artikel dazu
durchgelesen. Jedoch bin ich bis jetzt nicht ganz durchgestiegen. Hier
wird imm geschrieben, dass man nur die Zahl minus 10 nehemen muss. Der
Rest soll dann das Ergebniss sein. Das kann ich nicht verstehen.

Nehmen wir mal z.B. die Zahl 138

1.  138 - 10 = 128
2.  128 - 10 = 118
3.  118 - 10 = 108
4.  108 - 10 = 98
5.  98  - 10 = 88
6.  88  - 10 = 78
7.  78  - 10 = 68
8.  68  - 10 = 58
9.  58  - 10 = 48
10. 48  - 10 = 38
11. 38  - 10 = 28
12. 28  - 10 = 18
13. 18  - 10 = 8

Also bleibt als Rest 8 übrig. Was muss ich jetzt machen damit ich das
Ergebnis für die BCD-Ansteuerung in 3 7 Segmentanzeigen bekomme?

Grüsse

Michael
Gast #360087
Lesenswert?

Der Rest ist schonmal richtig...

138 % 10 = 8 bzw. das was bei deiner Rechnung übrigbleibt, wäre die
letzte Stelle

138 / 10 = 13

13 % 10 = 3
mittlere Stelle

13 / 10 = 1

1 % 10 = 1
erste Stelle

% = Rest der Division
Gast #360088
Lesenswert?

1. warum nimmst du manchmal das Zeichen % für die Division und ein
anders mal das Zeichen / ?

2. Wenn ich keine Division berechen kann, wie gehe ich dann vor? Gibt
es da nicht eine andere Lösung?

Grüsse

Michael
Gast #360089
Lesenswert?

@Michael
Na, dann schaue Dir doch mal Deine Tabelle genau an!

Nehmen wir mal z.B. die Zahl 138

1.  138 - 10 = 128
2.  128 - 10 = 118
3.  118 - 10 = 108
4.  108 - 10 = 98
5.  98  - 10 = 88
6.  88  - 10 = 78
7.  78  - 10 = 68
8.  68  - 10 = 58
9.  58  - 10 = 48
10. 48  - 10 = 38
11. 38  - 10 = 28
12. 28  - 10 = 18
13. 18  - 10 = 8

Also bleibt als Rest 8 übrig.

Nach was sieht das wohl aus? Richtig, nach einer Programm-Schleife. In
der letzten Zeile stehen beide erforferlichen Ergebnisse, der Quotient
und der Divisionsrest.

Markus
Gast #360090
Lesenswert?

Zu 1.:
% ist der Modulo-Operator, der den Rest einer ganzzahligen Division
liefert (deshalb 138 % 10 = 8 weil 138 / 10 = 13 Rest 8).

Zu 2.:
Wenn Du keine Division kannst (ich weiß nicht, mit was für einem System
Du arbeitest, das eine Division nicht einmal durch eine Ersatzoperation
ersetzen kann), dann mach es so, wie Du selbst es oben gemacht hast:
Als sukzessive Subtraktion...
Gast #360091
Lesenswert?

>1. warum nimmst du manchmal das Zeichen % für die Division und ein
>anders mal das Zeichen / ?

Weil beide unterschiedliche Ergebnisse liefern:
% liefert den ganzzahligen Rest
/ liefert bei ganzen Zahlen (integer, char...) die ganzzahlige Division
(sozusagen alles was sonst vor dem Komma steht).

Wenn man sich deine Tabelle anguckt führt die zu zwei Schleifen:
Von 138 so oft 10 subtrahieren, bis das Ergebnis kleiner als 10 ist ==>
Das Ergebnis ist die kleinste Stelle.
Ist die Anzahl der Schleifendurchläufe auch noch >= 10, muß eine
weitere Schleife nach dem gleichen Prinzip durchlafuen werden.
Das muß man einfach so lange machen, bis die Anzahl der
Schleifendurchläufe kleiner als 10 ist.
Somit sollte es möglich sein, jede beliebige natürliche Zahl in ihre
Stellen mit nur 2 ineinandern verschachtelten Schleifen zu zerlegen.
Gast #360094
Lesenswert?

Das Ding ist von 1997, ob der Autor selbst überhaupt noch weiß, was er
damals mit der Grafik zeigen wollte (ich hab mir nicht die komplette
Seite angeguckt...).

Die 8 steht in deiner letzten Siebensegmentanzeige.
Die Anzahl der Durchläufe, die du bis zu diesem Ergebnis gebraucht
hast, bilden die beiden anderen (höherwertigen) Segmente.
Die kann man nach der gleichen Methode bestimmen. (Hatte ich oben schon
beschrieben...)
#360095
Lesenswert?

<Zitat>
Da der zu implementierende Chip genau die Funktion des Vergleichens und
Subtrahierens übernimmt, kann man eine Division durch eine Kaskadierung
des Chips erreichen
</Zitat>

Er macht also genau das gleiche wie du. Nur macht er's in
Hardware und du in Software.

Komm schon. So schwer ist das nicht. In längstens 2 Stunden
hast du das implementiert.

Wenn es nur um Bytes geht:
Entweder ist die Zahl > 199 oder nicht. Wenn größer als 199,
dann ist die erste Stelle schon mal eine 2. Wenn nicht, dann
kann die Zahl noch größer als 99 sein, dann ist die erste
Stelle eine 1 ansonsten ist das eine 0.
Gleichzeitig hast du jeweils entweder 200 oder 100 oder 0 abgezogen
und damit deine Zahl in den Bereich 00 bis 99 gebracht.
Jetzt ziehst du in einer Schleife solange 10 ab, bis das Ergebnis
kleiner als 10 wird. Dabei zählst du mit wieoft du abgezogen
hast. Diese Anzahl ist die Zehnerstelle und das was nach der
ganzen Abzieherei übrig bleibt ist die Einerstelle.

Wenn wir nicht über Bytes reden, dann funktioniert die Erkennung
der Hunderterstellen genauso wie die der Zehnerstellen. Nur ziehst
du halt solange 100 ab, bis das Ergebnis kleiner als 100 geworden
ist und zählst mit wie oft du das gemacht hast.

Apropos: Worüber reden wir eigentlich? Assembler oder C?
Gast #360096
Lesenswert?

Ich will es im FPGA realisieren :-)

Ok vielen Dank für Eure Hilfe. Ich werde es wie oben beschrieben
realsieren. Es stellt kein Problem mehr da. Zeit für die Berechnung
habe ich ich auch genügend. :-)

P.S. Ich weiß es ist nicht das Forum für FPGAs aber ich wollte auch nur
Ideen für die Umsetzung sammeln. 2 Werte voneinander zu subtrahieren ist
kein Problem.

DANKE

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren