BCD碼實際上就是將原本的十進制數的每一位用一個4位二進制數表示,每一位0-9。
二進制4位能夠表達的數字范圍是0-15。
由此可見BCD碼的一段與普通四位二進制來表示十進制位有6的進制差。所以這就是二進制轉化為BCD碼的關鍵所在。下面來講講主要步驟:
- 先預估十進制數的位數,預先給BCD碼分好段,此時的BCD碼為空無任何數據
- 接着講原本的二進制數的最高位一端從BCD碼的最低位端插入,也可以看作是將二進制數與BCD碼同時左移每次將二進制的頭砍掉補到BCD碼最后,但個人覺得逐位插入更加形象~
- 關鍵來啦,之前提到過BCD碼每一個四位二進制(表示十進制的一位)存儲范圍是0-9,而原本的二進制四位的存儲范圍是0-15,所以二進制在逐位后端插入BCD碼時,若BCD碼的某一段(四位二進制)>9 則我們手動給該段+6強行使其進位滿足BCD碼的存儲范圍的要求--簡單的說就是一直同時左移,某一段>9就+6。
- 這里可以進行優化,就是常用的+3(+011)左移法,即在左移之前先判斷本段是否>4(>0100),若大於則左移之后必然會超過9,所以在左移之前先在該段+3(+011),那么左移之后就已經實現了進位啦。
- 就這么一直將二進制逐位從底端插入(左移),同時保持每段的范圍在0-9內最終就能得到BCD碼聊。