Николай Коровин (09.02.2007 23:15, просмотров: 1) ответил AVR на Ну и еще до кучи - те же яйца, но в свернутом неоптимизированном цикле
А еще "свернуть" слабо? :) Все-таки процедуры, результат которых воспринимает человек, типа itoa, нужно оптимачить на объем, а не на скорость -- сам юзер-то не пулемет и мессаг там не миллион :) А на скорость можно еще злее :)
<c>
char asc[5];
void itoa1(unsigned int binval)
{
register unsigned int temp,val;
register char binc,atemp;
val=binval;
atemp='0'; if (val>=80000) {atemp+=8;val-=80000;}
else if (val>=40000) {atemp+=4;val-=40000;}
else if (val>=20000) {atemp+=2;val-=20000;}
else if (val>=10000) {atemp++;val-=10000;} *asc=atemp;
atemp='0'; if (val>=8000) {atemp+=8;val-=8000;}
else if (val>=4000) {atemp+=4;val-=4000;}
else if (val>=2000) {atemp+=2;val-=2000;}
else if (val>=1000) {atemp++;val-=1000;} *(asc+1)=atemp;
atemp='0'; if (val>=800) {atemp+=8;val-=800;}
else if (val>=400) {atemp+=4;val-=400;}
else if (val>=200) {atemp+=2;val-=200;}
else if (val>=100) {atemp++;val-=100;} *(asc+2)=atemp;
atemp='0'; if (val>=80) {atemp+=8;val-=80;}
else if (val>=40) {atemp+=4;val-=40;}
else if (val>=20) {atemp+=2;val-=20;}
else if (val>=10) {atemp++;val-=10;} *(asc+3)=atemp;
*(asc+4)=binc+'0';
}
</c>
Старый добрый двоично-десятичный :)
Но я бы все-таки об объеме в первую очередь озаботился... Вот глянь, ну неужели так не компактнее?
<c>
void itoa3(unsigned int v, char *a)
{
int vv,i;
char *aa;
vv=v;aa=a;
for (i=0; i<5; i++)
{
*aa='0';
while(val >= 10000){aa++;vv-=10000};
aa++;
vv*=10;
}
</c>