Basics
As described in the introduction, BCD takes advantage of the fact that any one decimal numeral can be represented by a four bit pattern:
Decimal Digit |
BCD 8 4 2 1 |
---|---|
0 | 0 0 0 0 |
1 | 0 0 0 1 |
2 | 0 0 1 0 |
3 | 0 0 1 1 |
4 | 0 1 0 0 |
5 | 0 1 0 1 |
6 | 0 1 1 0 |
7 | 0 1 1 1 |
8 | 1 0 0 0 |
9 | 1 0 0 1 |
As most computers store data in 8-bit bytes, it is possible to use one of the following methods to encode a BCD number:
- Uncompressed: each numeral is encoded into one byte, with four bits representing the numeral and the remaining bits having no significance.
- Packed: two numerals are encoded into a single byte, with one numeral in the least significant nibble (bits 0-3) and the other numeral in the most significant nibble (bits 4-7).
As an example, encoding the decimal number 91 using uncompressed BCD results in the following binary pattern of two bytes:
Decimal: 9 1 Binary : 0000 1001 0000 0001In packed BCD, the same number would fit into a single byte:
Decimal: 9 1 Binary : 1001 0001Hence the numerical range for one uncompressed BCD byte is zero through nine inclusive, whereas the range for one packed BCD is zero through ninety-nine inclusive.
To represent numbers larger than the range of a single byte any number of contiguous bytes may be used. For example, to represent the decimal number 12345 in packed BCD, using big-endian format, a program would encode as follows:
Decimal: 1 2 3 4 5 Binary : 0000 0001 0010 0011 0100 0101Note that the most significant nibble of the most significant byte is zero, implying that the number is in actuality 012345. Also note how packed BCD is more efficient in storage usage as compared to uncompressed BCD; encoding the same number in uncompressed format would consume 100 percent more storage.
Shifting and masking operations are used to pack or unpack a packed BCD digit. Other logical operations are used to convert a numeral to its equivalent bit pattern or reverse the process.
Read more about this topic: Binary-coded Decimal