cpubbs 发表于 2004-11-6 02:25:05

十进制转bcd三种算法的比较[转贴]

<B>十进制转bcd三种算法的比较(haotz)</B></P>
//
*********************************************************************
************

//*   Function:DecimalToBcdAscii
*
// * Description: Convert
decimal value to 3 digit BCD ASCII value *
//
*******************************************************************************
**
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 &lt; 0)   
       {
          goto Tens1;
          }
       Hundreds = Hundreds + 1; // Increment
Hundreds count
       goto Hundreds;
   Tens1:
// Tens
   DecimalValue = DecimalValue + 100;
   Tens2:
       DecimalValue = DecimalValue - 10;
       if (DecimalValue &lt; 0)   
       {
         goto Ones1;
         }
       Tens = Tens + 1; //
Increment Tens count
       goto Tens2;   
   Ones1:
// Ones
   DecimalValue = DecimalValue + 10;
   Ones2:
       DecimalValue = DecimalValue - 1;
       if (DecimalValue &lt; 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&lt;reg51.h&gt;
#include&lt;stdio.h&gt;
main()
{//clk=12Mhz
int i;
//算法1 耗时0.25s
for (i=0;i&lt;1000;i++)
DecimalToBcdAscii(i);
//算法2 耗时0.42s
for (i=0;i&lt;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&lt;1000;i++)
{unsigned char buf;
sprintf(buf,"%3d",i);
}
}
页: [1]
查看完整版本: 十进制转bcd三种算法的比较[转贴]