**Binary Coded Decimal** or BCD as it is more commonly called, is another process for converting decimal numbers into their binary equivalents.

As we have seen in this Binary Numbers section of tutorials, there are many different binary codes used in digital and electronic circuits, each with its own specific use.

As we naturally live in a decimal (base-10) world we need some way of converting these decimal numbers into a binary (base-2) environment that computers and digital electronic devices understand, and binary coded decimal code allows us to do that.

We have seen previously that an n-bit binary code is a group of “n” bits that assume up to 2^{n} distinct combinations of 1’s and 0’s. The advantage of the Binary Coded Decimal system is that each decimal digit is represented by a group of 4 binary digits or bits in much the same way as Hexadecimal. So for the 10 decimal digits (0-to-9) we need a 4-bit binary code.

But do not get confused, *binary coded decimal* is not the same as hexadecimal. Whereas a 4-bit hexadecimal number is valid up to F_{16} representing binary 1111_{2}, (decimal 15), binary coded decimal numbers stop at 9 binary 1001_{2}. This means that although 16 numbers (2^{4}) can be represented using four binary digits, in the BCD numbering system the six binary code combinations of: 1010 (decimal 10), 1011 (decimal 11), 1100 (decimal 12), 1101 (decimal 13), 1110 (decimal 14), and 1111 (decimal 15) are classed as forbidden numbers and can not be used.

The main advantage of binary coded decimal is that it allows easy conversion between decimal (base-10) and binary (base-2) form. However, the disadvantage is that BCD code is wasteful as the states between 1010 (decimal 10), and 1111 (decimal 15) are not used. Nevertheless, binary coded decimal has many important applications especially using digital displays.

In the BCD numbering system, a decimal number is separated into four bits for each decimal digit within the number. Each decimal digit is represented by its weighted binary value performing a direct translation of the number. So a 4-bit group represents each displayed decimal digit from 0000 for a zero to 1001 for a nine.

So for example, 357_{10} (Three Hundred and Fifty Seven) in decimal would be presented in Binary Coded Decimal as:

357_{10} = 0011 0101 0111 (BCD)

Then we can see that BCD uses weighted codification, because the binary bit of each 4-bit group represents a given weight of the final value. In other words, the BCD is a weighted code and the weights used in binary coded decimal code are 8, 4, 2, 1, commonly called the **8421 code** as it forms the 4-bit binary representation of the relevant decimal digit.

Binary Power | 2^{3} |
2^{2} |
2^{1} |
2^{0} |

Binary Weight: | 8 | 4 | 2 | 1 |

The decimal weight of each decimal digit to the left increases by a factor of 10. In the BCD number system, the binary weight of each digit increases by a factor of 2 as shown. Then the first digit has a weight of 1 ( 2^{0} ), the second digit has a weight of 2 ( 2^{1} ), the third a weight of 4 ( 2^{2} ), the fourth a weight of 8 ( 2^{3} ).

Then the relationship between decimal (denary) numbers and weighted binary coded decimal digits is given below.

Decimal Number | BCD 8421 Code | |

0 | 0000 0000 | |

1 | 0000 0001 | |

2 | 0000 0010 | |

3 | 0000 0011 | |

4 | 0000 0100 | |

5 | 0000 0101 | |

6 | 0000 0110 | |

7 | 0000 0111 | |

8 | 0000 1000 | |

9 | 0000 1001 | |

10 (1+0) | 0001 0000 | |

11 (1+1) | 0001 0001 | |

12 (1+2) | 0001 0010 | |

… | … | |

20 (2+0) | 0010 0000 | |

21 (2+1) | 0010 0001 | |

22 (2+2) | 0010 0010 | |

etc, continuing upwards in groups of four |

Then we can see that **8421 BCD** code is nothing more than the weights of each binary digit, with each decimal (denary) number expressed as its four-bit pure binary equivalent.

As we have seen above, the conversion of decimal to binary coded decimal is very similar to the conversion of hexadecimal to binary. Firstly, separate the decimal number into its weighted digits and then write down the equivalent 4-bit 8421 BCD code representing each decimal digit as shown.

Using the above table, convert the following decimal (denary) numbers: 85_{10}, 572_{10} and 8579_{10} into their 8421 BCD equivalents.

85_{10} = 1000 0101 (BCD)

572_{10} = 0101 0111 0010 (BCD)

8579_{10} = 1000 0101 0111 1001 (BCD)

Note that the resulting binary number after the conversion will be a true binary translation of decimal digits. This is because the binary code translates as a true binary count.

The conversion from binary coded decimal to decimal is the exact opposite of the above. Simply divide the binary number into groups of four digits, starting with the least significant digit and then write the decimal digit represented by each 4-bit group. Add additional zero’s at the end if required to produce a complete 4-bit grouping. So for example, 110101_{2} would become: 0011 0101_{2} or 35_{10} in decimal.

Convert the following binary numbers: 1001_{2}, 1010_{2}, 1000111_{2} and 10100111000.101_{2} into their decimal equivalents.

1001_{2} = 1001_{BCD} = 9_{10}

1010_{2} = this will produce an error as it is decimal 10_{10} and not a valid BCD number

1000111_{2} = 0100 0111_{BCD} = 47_{10}

10100111000.101_{2} = 0101 0011 0001.1010_{BCD} = 538.625_{10}

The conversion of BCD-to-decimal or decimal-to-BCD is a relatively straight forward task but we need to remember that BCD numbers are decimal numbers and not binary numbers, even though they are represented using bits. The BCD representation of a decimal number is important to understand, because microprocessor based systems used by most people needs to be in the decimal system.

However, while BCD is easy to code and decode, it is not an efficient way to store numbers. In the standard 8421 BCD encoding of decimal numbers, the number of individual data bits needed to represent a given decimal number will always be greater than the number of bits required for an equivalent binary encoding.

For example, in binary a three digit decimal number from 0-to-999 requires only 10-bits (1111100111_{2}), whereas in binary coded decimal, the same number requires a minimum of 12-bits (0011 1110 0111_{BCD}) for the same representation.

Also, performing arithmetic tasks using binary coded decimal numbers can be a bit awkward since each digit can not exceed 9. The addition of two decimal digits in BCD, will create a possible carry bit of 1 which needs to be added to the next group of 4-bits.

If the binary sum with the added carry bit is equal to or less than 9 (1001), the corresponding BCD digit is correct. But when the binary sum is greater than 9 the result is an invalid BCD digit. Therefore it is better to convert BCD numbers into pure binary, perform the required addition, and then convert the back to BCD before displaying the results.

Nevertheless, the use of a BCD coding system in both microelectronics and computer systems is particularly useful in situations where the binary coded decimal is intended to be displayed on one or more 7-segment LED or LCD displays and there are many popular integrated circuits available that are configured to give a BCD output or outputs.

One common IC is the 74LS90 asynchronous counter/divider that contains independent divide-by-2 and divide-by-5 counters that can be used together to produce a divide-by-10 decade counter with BCD outputs. Another is the 74LS390 which is a dual version of the basic 74LS90, and can also be configured to produce a BCD output.

But the most commonly used BCD encoded IC’s are the 74LS47 and the 74LS48 BCD to 7-segment decoder/driver, which converts a 4-bit BCD code of a counter, etc. and converts it into the required display code to drive the individual segments of a 7-segment LED display. While both IC’s are functionally the same, the 74LS47 has active-low outputs for driving common-anode displays, while the 74LS48 has active-high outputs for driving common-cathode displays.

We have seen here that **Binary Coded Decimal** or **BCD** is simply the 4-bit binary code representation of a decimal digit with each decimal digit replaced in the integer and fractional parts with its binary equivalent. BCD Code uses four bits to represent the 10 decimal digits of 0 to 9.

So for example, if we wanted to display decimal numbers in the range of 0-to-9, (one digit) we would need 4 data bits (a nibble), decimal numbers in the range of 0-to-99, (two digits) we would need 8 bits (one byte), decimal numbers in the range of 0-to-999, (three digits) we would need 12 bits, and so on. The use of a single byte (8-bits) to store or display two BCD digits, allowing a byte to hold a BCD number in the range of 00 – 99, is known as *packed BCD*.

Standard binary coded decimal code is commonly known as a weighted 8421 BCD code, with 8, 4, 2 and 1 representing the weights of the different bits starting from the most significant bit (MSB) and proceeding towards the least significant bit (LSB). The weights of the individual positions of the bits of a BCD code are: 2^{3} = 8, 2^{2} = 4, 2^{1} = 2, 2^{0} = 1.

The main advantage of the **Binary Coded Decimal** system is that it is a fast and efficient system to convert the decimal numbers into binary numbers as compared to the pure binary system. But the BCD code is wasteful as many of the 4-bit states (10-to-16) are not used but decimal displays have important applications.

Error! Please fill all fields.

Converting Decimal to BCD is easy but how do I convert BCD to Decimal when the BCD is like this: 0111100100100010110 (BCD)

It’s 248,086 (decimal), or 3C916 (hex)