|
作者:鞠春阳 [返回] 十进制转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; } #i nclude<reg51.h> #i nclude<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); } }
|