十进制转bcd.txt

来自「绝对好用的十进制转BCD码C语言源代码」· 文本 代码 · 共 76 行

TXT
76
字号
十进制转bcd三种算法 

unsigned char Hundreds,Tens,Ones;
void DecimalToBcdAscii(signed short DecimalValue)
{
    Hundreds = 0; 
// Initialize BCD values
   Tens = 0;
   Ones = 0;
  
   Hundreds: 
// Hundreds
     DecimalValue = DecimalValue - 100;
       if (DecimalValue < 0)   
       {
          goto Tens1;
          }
       Hundreds = Hundreds + 1; // Increment 
Hundreds count
       goto Hundreds;  
   Tens1: 
// Tens
     DecimalValue = DecimalValue + 100;
   Tens2:
       DecimalValue = DecimalValue - 10;
       if (DecimalValue < 0)   
       {
         goto Ones1;
         }
       Tens = Tens + 1; // 
Increment Tens count
       goto Tens2;    
   Ones1: 
// Ones
     DecimalValue = DecimalValue + 10;
   Ones2:
       DecimalValue = DecimalValue - 1;
       if (DecimalValue < 0)   
       {
          goto AddAsciiOffset;
          }
       Ones = Ones + 1; // 
Increment Ones count
       goto Ones2;    
    AddAsciiOffset: 
// Add ASCII offset
       Hundreds = Hundreds + 48;
       Tens = Tens + 48;
       Ones = Ones + 48; 
}
#include<reg51.h>
#include<stdio.h>
main()
{//clk=12Mhz
int i;
//算法1 耗时0.25s
for (i=0;i<1000;i++)
DecimalToBcdAscii(i); 
//算法2 耗时0.42s
for (i=0;i<1000;i++)
{int t;
 Hundreds=i/100;
 t=i%100;
 Tens=t/10;
 Ones=i%10;
 }
Hundreds = Hundreds + 48;
Tens = Tens + 48;
Ones = Ones + 48; 
//算法3 耗时1.5s
for (i=0;i<1000;i++)
{unsigned char buf[5];
sprintf(buf,"%3d",i);
}
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?