C語言之linux核心--BCD碼轉二進位制與二進位制轉BCD碼(筆試經典)
阿新 • • 發佈:2019-02-04
在分析程式碼之前,我們先來了解一下,BCD碼和二進位制到底區別在哪?
學習過計算機原理的和數位電子技術這兩門課的都會知道這兩個到底是什麼含義,也有的同學學過了,考過了,過了一段時間又忘記了,今天,我們通過一個程式碼案例來說說:
我們先查查百度,瞭解一下BCD碼:
BCD碼(Binary-Coded Decimal)亦稱二進碼十進數或二-十進位制程式碼。用4位二進位制數來表示1位十進位制數中的0~9這10個數碼。是一種二進位制的數字編碼形式,用二進位制編碼的十進位制程式碼。BCD碼這種編碼形式利用了四個位元來儲存一個十進位制的數碼,使二進位制和十進位制之間的轉換得以快捷的進行。這種編碼技巧最常用於會計系統的設計裡,因為會計制度經常需要對很長的數字串作準確的計算。相對於一般的BCD碼的運算規則:BCD碼是十進位制數,而運算器對資料做加減運算時,都是按二進位制運算規則進行處理的。這樣,當將 BCD碼傳送給運算器進行運算時,其結果需要修正。修正的規則是:當兩個BCD碼相加,如果和等於或小於 1001(即
有點哆嗦,接下來我們直接來看看程式碼:
執行結果: 從結果可以看出17的二進位制數是0001 0001---->對應16進位制0x11 將17轉為BCD碼後4個位表示一個位,所以就表示為二進位制數0001 0111----->對應16進位制數0x17也就是十進位制的23#include <stdio.h> #include <stdlib.h> //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 ; }
總結: BIN碼:就是二進位制數 BCD碼:原則是從低位開始分別以四個Bit表示一個位,BCD碼就是十進位制的二進位制數 另外一個BCD碼轉二進位制介面不嘗試,原理一樣。