在分析代碼之前,我們先來了解一下,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 ; }