bcd in long umwandeln
-
hallo!
ich habe einen auftrag bekommen:
ich soll 3 byte bcd in ein long umwandeln,
bin noch neu in c bzw c++
kann mir bitte jemand helfen
mfg
vivek
-
Was ist bcd?
-
bcd ist binary code decimal
-
Wie ist die Zahl codiert?
-
Der Begriff BCD steht für Binär Codierte Dezimalzahl. Gemeint ist damit der Umstand, dass in einem Speicherbyte, genau eine Ziffer des dezimalen Zahlensystems, also eine der Ziffern 0 bis 9 abgelegt wurde. In der Speicherzelle müssen dementsprechend die ersten vier Bits 0000b lauten, und die darauffolgenden Bits können nur die Werte 0000b bis 1001b besitzen. Die Bitkombinationen für A bis F (1010-1111) können nicht vorkommen.
Da diese Codierung, in dem zur Rede stehenden Byte, grundsätzlich die oberen vier Bits ungenutzt lässt, ist diese Art der Codierung sehr speicheraufwendig. Pro Dezimalziffer muss ein Byte bereitgestellt werden. Zudem kann mit derartig codierten Zahlen nur unter zusätzlichem Programmaufwand gerechnet werden, denn CPU's rechnen normalerweise im hexadezimalen Zahlensystem. Die Addition von 6 + 7 beispielsweise müsste zu der zwei Bytes umfassenden BCD-Codierung [1] [3] führen. Würde eine CPU die beiden Speicherinhalte jedoch addieren, käme sie auf [Dh]...
0000 0110 6
+ 0000 0111 +7
-------------
= 0000 1101 keine BCD-ZahlDas Ergebnis wäre hexadezimal betrachtet zwar richtg, da .. 0000 1101b = Dh = 13 ergibt, entspräche aber in keiner Weise der erwarteten BCD-Kodierung, die 0000 0001 und 0000 0011 lauten müsste.
-
Ich wollte nur wissen, werden auch negative Zahlen betrachtet?
Also die Codierung die ich jetzt meine ist
1 2 3 4 5 6 ... n
das erste Bit steht für das Vorzeichen
die weiteren beschreiben die Zahl im Binärcode.mal Bsp.'s für eine 4Bit Zahlen
0101 -> 5
1001 ->-1
1000 ->-7
-
Ok, ich habe verstanden was Du machen sollst.
Kann aber etwas mit der Lösung dauern.
-
M. E. wird in den oberen vier Bit eine weitere Ziffer gespeichert, so daß in einem Byte die Zahlen 0-99 enthalten sein können.
#define BCD_Int(bcdByte) (10 * (bcdByte & 0xF0) + (bcdByte & 0x0F))
-
nein negative gibt es nicht
-
danke viel mals
-
Zur Geschichte: In der Lochkartenzeit waren bei BIG BLUE die Ziffern in BCD Code abgelegt.