[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Вот пример:
int IntToBCD(int x) // x < 10000
{
int y;
y = x % 10;
x /= 10;
y += ((x % 10) << 4);
x /= 10;
y += ((x % 10) << 8);
x /= 10;
y += (x << 12);
return y;
}
Естественно, это дело лучше соптимизировать на "языке ассемблера" (как говорят буквоеды) на предмет эффективного использования регистров, т.к. Keil использует регистры как полный идиот. Здесь всего 3 деления. Поскольку C166 умеет делить довольно быстро, я не думаю, что способ со сдвигами или вычитаниями будет быстрее.
E-mail: info@telesys.ru