在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪?
学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过一个代码案例来说说:
我们先查查百度,了解一下BCD码:
BCD码(Binary-Coded Decimal?)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。 由于十进制数共有0、1、2、……、9十个数码,因此,至少需要4位二进制码来表示1位十进制数。4位二进制码共有2^4=16种码组,在这16种代码中,可以任选10种来表示10个十进制数码,共有N=16!/[10!*(16-10)!]等于8008种方案。常用的BCD代码列于末。 BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的;无权BCD码有余3码,余3循环码等。#include运行结果: 从结果可以看出17的二进制数是0001 0001---->对应16进制0x11 将17转为BCD码后4个位表示一个位,所以就表示为二进制数0001 0111----->对应16进制数0x17也就是十进制的23#include //BCD码转为二进制 unsigned bcd2bin(unsigned char val) { return (val & 0x0f) + (val >> 4) * 10; } //二进制转为BCD码 unsigned char bin2bcd(unsigned val) { return ((val / 10) << 4) + val % 10; } int main(void) { unsigned val = 17; printf("bin:%u--->0x%x\n",val,val); printf("bcd:%u--->0x%x\n",bin2bcd(val) , bin2bcd(val)); return 0 ; }