十六進位和BCD碼的那些事(終結篇)
來源:互聯網
上載者:User
十六進位轉為BCD碼好理解,有問題的是BCD碼轉為十六進位數;
Hex2Bcd:
0x3F的BCD碼是多少。正確答案:99,或者0x63
0x3F=63,再加0x,->0x63, 再把0x63轉為99(0x63=99)
1、如果要表示為十六進位,則轉換為10進位數,前面加0x符號;(十六進位表示)
2、如果要表示為十進位,則先轉換為10進位數,前面加0x符號,再把加上符號的
十六進位數轉為十進位數;(十進位表示)
如果一個數為0x38,則BCD碼為86
Bcd2Hex:(註:)
1、如果這個數是16進位表示的,把0x符號去掉,當成10進位數直接轉換為16進位數即可;
(前提是這個16進位表示的數的任何一位不能大於9,也就是說不能出現A、B、C、D、E、F)
如:0x999,去掉0x,->999,再轉為十六進位數為0x3E7
2、如果這個數是十進位表示的,先把這個數轉換為16進位數,再把0x符號去掉,當成
十進位數,再轉化為十六進位數即可;(註:這個數要在一定範圍內,才行,如999轉換為
十六進位為0x3E7,把0x去掉,3E7不在10進位表示範圍內,)
上面說的是在一定範圍內的數,對於不在一定範圍內的數怎麼轉。剛開始還真不好理解,
是因為學校教給我們的數學規則限制了我們的思維,對於一個數3E7,當成10進位怎麼理解?
還是按十進位來,個位、十位、百位...,只不過現在十位上的數是14,
BCD碼999轉換為十六進位是多少。正確答案:447,若者0x1BF,為什麼。想不通...
轉換過程:
999轉為十六進位,->0x3E7,
3
3*10+E=44
(3*10+E)*10+7
=447
也就相當於0x3E7當成10進位理解,則是3*100+E*10+7,簡單不。
注:一個十六進位數轉為BCD碼,但這個BCD碼再轉為十六進位數,不等於這個數;
如:如果一個數為0x999,Hex2Bcd(0x999)=0x2547(9543),Bcd2Hex(0x2547)=0x9F3(2547)
而一個BCD碼的數可以轉為十六進位數,這個十六進位數可以反轉為BCD碼,可能等於這個
數(這個數是十六進位表示,且每一位的數字在0~9之間);也可能不等於這個數;
如:Bcd2Hex(0x999)=0x3E7(999),Hex2Bcd(0x3E7)=2457(0x999)(等於)
Bcd2Hex(0x9F3)=0x41D(1053),Hex2Bcd(0x41D)=0x1053(4179)
Bcd2Hex(999)=0x1BF(447),Hex2Bcd(0x1BF)=0x447(1095)(不等於)
Bcd2Hex(0x447)=0x1BF(447),Hex2Bcd(0x1BF)=0x447(1095)(等於)
結論:16進位轉BCD無法復原,BCD轉16進位有可能可逆。