标题:
unsigned int to BCD 自己想的,但是效率还是比顶尖高手慢一半
[打印本页]
作者:
wudawei
时间:
2014-12-31 00:03
标题:
unsigned int to BCD 自己想的,但是效率还是比顶尖高手慢一半
约160个周期,顶尖高手的才70多个周期。(最后附)
/* unsigned char temp;
D1=D2=D3=D4=D5=0;
temp=((unsigned char *)&value)[0];
if(temp&0x80){D1+=3;D2+=2;D3+=7;D4+=6;D5+=8;}
if(temp&0x40){D1+=1;D2+=6;D3+=3;D4+=8;D5+=4;}
if(temp&0x20){D2+=8;D3+=1;D4+=9;D5+=2;}
if(temp&0x10){D2+=4;D3+=0;D4+=9;D5+=6;}
if(temp&0x08){D2+=2;D3+=0;D4+=4;D5+=8;}
if(temp&0x04){D2+=1;D3+=0;D4+=2;D5+=4;}
if(temp&0x02){D3+=5;D4+=1;D5+=2;}
if(temp&0x01){D3+=2;D4+=5;D5+=6;}
temp=((unsigned char *)&value)[1];
if(temp&0x80){D3+=1;D4+=2;D5+=8;}
if(temp&0x40){D4+=6;D5+=4;}
if(temp&0x20){D4+=3;D5+=2;}
if(temp&0x10){D4+=1;D5+=6;}
if(temp&0x08){D5+=8;}
if(temp&0x04){D5+=4;}
if(temp&0x02){D5+=2;}
if(temp&0x01){D5+=1;}
/* while(D5>=10){D5-=10;D4++;}
while(D4>=10){D4-=10;D3++;}
while(D3>=10){D3-=10;D2++;}
while(D2>=10){D2-=10;D1++;}
if(D5>=10){D4+=D5/10;D5=D5%10;}
if(D4>=10){D3+=D4/10;D4=D4%10;}
if(D3>=10){D2+=D3/10;D3=D3%10;}
if(D2>=10){D1+=D2/10;D2=D2%10;}
while(value>=1000){D1++;value=value-1000;}
while(value>=100){D2++;value=value-100;}
while(value>=10){D3++;value=value-10;}
D4=value;*/
这个才70多周期
void show_value(unsigned int x)
{
unsigned char i,j,k; //临时变量
k = x;
x = x >> 2;
i = x >> 8;
j = (i + i + i) << 1;
if (i > 41)
{
i++;
j+=6;
}
j = j + x;
if ((unsigned char)x > j )
{
i++;
j+=6;
}
if (j > 249)
{
i++;
j+=6;
}
D1 = i / 10; //分离得到的万(10000)位
D2 = B; //分离得到的千(1000)位
D3 = j / 25; //分离得到的百(100)位
D4 = (B<<2 | k&3) / 10; //分离得到的十(10)位
D5 = B; //分离得到的个(1)位
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1