ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
80745 Топик полностью
Николай Коровин (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>