十六进制和BCD码的那些事(终结篇)

十六进制转为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进制有可能可逆。
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值