Forum: PC-Programmierung C# Dezimal Zahlen und BCD Zahlen


von F.R (Gast)


Lesenswert?

Hallo,

Habe da mal eine kleine Frage:

Wenn ih eine Dezimalzahl z.B.: 65 habe dan würde ja die BCD Zahl davon 
101 sein (0110 0101).

Möchte jetzt gerne durch einen Algorithmus von den 65 auf die 101 
rechnerisch kommen um dies später auszugeben.

Sollte natürlich auch mit anderen beliebigen Werten funktionieren.

Programmiersprache is übrigen C#


Danke im voraus !

von nicht"Gast" (Gast)


Lesenswert?

Hallo,


F.R schrieb:
> Möchte jetzt gerne

Das ist aber schön, dass du das möchtest.

Was hast du denn bisher und woran hängt es aktuell?

Grüße,

von F.R (Gast)


Lesenswert?

Hmm nicht wirklich viel...  :/

Mir is klar, dass die 65 in 6 und 5 zerlegt werden und dann anschließen 
von jeder Zahl die Binärdarstellung berechnet wird.

Also in dem Fall 6 = 0110
und 5 = 0101

zusammen also 0110 0101 nun wieder zurückgerechnet auf Dezimalsystem 
bekomme ich 101 raus.

suche aber eher nach einer Mathematischen Methode mit der ich von der 65 
direkt auf die 101 rechnen kann.

MFG

von nicht"Gast" (Gast)


Lesenswert?

Dafür gibts Die Klasse Convert
1
   int toConvert = 5;
2
   int base = 2; 
3
   string wert = Convert.ToString(toConvert ,base );
4
   // wert ="101"

von Dirk B. (dirkb2)


Lesenswert?

F.R schrieb:
> suche aber eher nach einer Mathematischen Methode mit der ich von der 65
> direkt auf die 101 rechnen kann.

Eine Formel gibt es da nicht.
Aber einen Algorithmus.

Stelle =1, BCD=0
solange Dezimalzahl > 0
  Ziffer = Dezimalzahl % 10
  Dezimalzahl = Dezimalzahl / 0
  BCD = BCD + Ziffer  * Stelle
  Stelle = Stelle * 16

Für zwei Stellen kannst du das auch direkt hin schreiben.

von F.R (Gast)


Lesenswert?

Ok, aber versehe ich nicht ganz :)

Ich hab ja eine Ganzzahl vom typ unsigned int wie kann ich den da mit c# 
die Funktion anwenden und welche Bibliothek benötige ich dafür

Danke für die Antwort !!

von F.R (Gast)


Lesenswert?

Genau danach suche ich also eine Art Algorithmus.

1000 dank dür die schnellen Antworten !!!

von Dirk B. (dirkb2)


Lesenswert?

Achso, das % ist der Modulo-Operator (Ganzahldivisionsrest)

von Zeno (Gast)


Lesenswert?

Dirk B. schrieb:
> Dezimalzahl = Dezimalzahl / 0

Division durch 0 ??? Das wäre ein mathematisches Novum - bei C# ist 
sicher auch das möglich.

von zitter_ned_aso (Gast)


Lesenswert?

F.R schrieb:
> Also in dem Fall 6 = 0110
> und 5 = 0101
>
> zusammen also 0110 0101 nun wieder zurückgerechnet auf Dezimalsystem
> bekomme ich 101 raus.



0x65=0110.0101

und 101 ist die dezimale Darstellung davon.

Einfach hex nach dezimal umwandeln.

von Dirk B. (dirkb2)


Lesenswert?

Zeno schrieb:
> Dirk B. schrieb:
>> Dezimalzahl = Dezimalzahl / 0

Dezimalzahl = Dezimalzahl / 10

Danke für den Hinweis

von F.R (Gast)


Lesenswert?

Dirk B. schrieb:
> Eine Formel gibt es da nicht.
> Aber einen Algorithmus.
>
> Stelle =1, BCD=0
> solange Dezimalzahl > 0
>   Ziffer = Dezimalzahl % 10
>   Dezimalzahl = Dezimalzahl / 0
>   BCD = BCD + Ziffer  * Stelle
>   Stelle = Stelle * 16
>
> Für zwei Stellen kannst du das auch direkt hin schreiben.


Wie bist du auf diese Form des Algorithmus gekommen?

Versuche gerade auch noch einen Rückrechnungsalgorithmus zu erstellen.

der soll mir dann von den 101 auf die 65 zurück rechnen. Hab versucht 
den bisherigen Algorithmus "umzukehren", jedoch erfolglos...

von Walter S. (avatar)


Lesenswert?

F.R schrieb:
> Hab versucht
> den bisherigen Algorithmus "umzukehren", jedoch erfolglos...

zeig mal deinen Versuch (oder brauchst du nur einen Dummen)

von Dirk B. (dirkb2)


Lesenswert?

F.R schrieb:
> Wie bist du auf diese Form des Algorithmus gekommen?

Dezimalzahlen haben die Basis 10
BCD Ziffern belegen 4 Bit. Daher kommt die 16.

Und es sind Stellenwertsysteme, die Position innerhalb der Zahl legt den 
Wert fest.

Bei der Zerlegung einer Zahl in Ziffern geht man halt so vor:
1
   Ziffer = Zahl % Basis   /* Ganz rechte Ziffer ermitteln mit Modulo */
2
   Zahl   = Zahl / Basis   /* Rest nach rechts verschieben */

Das andere ist das zusammenbasteln der neuen Darstellung.
1
   Zahl   = Zahl +  Ziffer * Wertigkeit

Die Wertigkeit der linken Ziffer kennt man aber erst, wenn man die 
rechte Stelle gefunden hat. Darum die Zerlegung von rechts (dort ist die 
1er Stelle).

Bei 4 Bit kann man eigentlich auch prima Bitoperationen (UND, ODER, 
SHIFT) anwenden.

von F.R (Gast)


Lesenswert?

Walter S. schrieb:
>(oder brauchst du nur einen Dummen)

Genau deswegen habe ich auch nicht nach einem fertigen Code gefragt 
sonder nach der Funktion bzw der Herkunft solcher Algorithmen.



Dirk B. schrieb:
> Bei 4 Bit kann man eigentlich auch prima Bitoperationen (UND, ODER,
> SHIFT) anwenden.


Genau das hat mir geholfen!
Super erklär, wie die Funktionalität bzw der Grundgedanke dahinter ist!!

Jetzt hats auch bei mir geklappt :)

Danke fürs schnelle Antworten !!

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.