首先记住BCD码的定义:用四位二进制数表示一位十进制数
公式:
是不是对这个公式表示不理解,难道不应该反过来吗?用这个公式发现怎么算不到正确的答案呢。
举个例子10进制245转化为二进制为1111 0101
那么求245的高四位为245/2^4=15(十进制)=0x0F(十六进制)
低四位为245%2^4=5(十进制)=0x05(十六进制)
再举个例子64535(十进制)转化为二进制为1111 1100 0001 0111
求64535的高八位为64535/2^8=252(十进制)=0xFC(十六进制)
低八位为64535%2^8=23(十进制)=0x17(十六进制)
看这个例子写的是BCD码转十进制,实际是转化成了用两位十进制数表示的BCD码。
说到这里应该都理解了,实际上就是我们错误理解了意思,以为BCD码转十进制是把BCD码82转化成十进制130,实际是先把1000 0010这个二进制数转化成10进制130,再取它的高四位和地四位,高四位为8,低四位为2。如果是计算十进制转BCD码的话,我们其实很快能算出来,关键是怎么用公式表达出来,这就是上面公式的意义。如果不是用c语言表示,那其实口算就好了。