16位二进制数转换为十进制数(BCD码)的可用算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析将16位二进制数转换为十 进制数(BCD码)的可用算法
------*****
算法一:
加3移位法(移位指令)
"二进制数调整BCD码的方法是将二进制码左移16次,每次移位后都检查低四 位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"
一、为什么左移16次 原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移16次, 把数据全部移进去。 但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数 据要小于 64H(即100)。第二,由于新寄存器是十进制的,要随时调整。 二、检查 半字节+3 是否大于 7,是,则 +3 在 51 系列里有十进制调节指令(半字节大于 9,则加 6,应该不难理 解),PIC 里没有,只好采取变通的方法。 检查 半字节+3 是否大于 7,也就是检查半字节是否大于 4。因为,如果 大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加 6, 起到十进制调节的作用。 那为什么要绕个圈子去检测 半字节+3 是否大于 7 呢?这样程序编起来 会简练一些。
8.1 10 1000 1000 ;大于7,加3进行调整
9 101 0001 0001 ;左移九次(得到BCD码511)
• 算法二: • 除法指令 • unsigned int ui;//(16位无符号二进制数) • unsigned char uc[5];//(BCD码表示的5位十
进制数) • uc[4]=(ui/10000)%10; • uc[3]=(ui/1000)%10; • uc[2]=(ui/100)%10; • uc[1]=(ui/10)%10; • uc[0]=ui%10;
4.1
0001 1000 ;大于7,加3进行调整
5
0011 0001 ;左移五次
6
0110 0011 ;左移六次,检查高四位+3>7?
6.1
1001 0011 ;大于7,加3进行调整
7ቤተ መጻሕፍቲ ባይዱ
1 0010 0111 ;左移七次,检查低四位+3>7?
7.1 1 0010 1010 ;大于7,加3进行调整
8 10 0101 0101 ;左移八次,检查高低四位+3>7?
• 算法三: • 减法+循环指令 • 如例4-22:
假如有一个二进制数511,我把他转511的十进制数
1 1111 1111 原数
1
0000 0001 ;左移一次
2
0000 0011 ; 左移二次
3
0000 0111 ;左移三次,检查低四位+3>7?
3.1
0000 1010 ;大于7,加3进行调整
4
0001 0101 ;左移四次, 检查低四位+3>7?
相关文档
最新文档