Цитата(zltigo @ Feb 16 2006, 15:45)

Цитата(skopus @ Feb 16 2006, 14:16)

Я написал вот такую вот функцию, но она работает слишком медленно (132 цикла при отключенной оптимизации).
Я многое видел, но оказалось передела нет
if( value < 0 )
value = ~value + 1;
Спасибо. Все время забываю про оператор
~Цитата(defunct @ Feb 16 2006, 16:56)

Цитата
а сколько же он по-вашему занимает? 10 ? может быть 4 ?

))
int - платформено зависимый тип, он может занимать 1, 2, 4 байт и т.д., для получения оптимальной скорости на заданной аппаратной платформе. тип short - платформенно независимый 16-ти разрядный singed..
вашу функцию, с учетом примера zltigo можно описать так:
Код
short asb(short value)
{
if( value < 0 )
return ~value + 1;
else
return value;
}
если же разрядность чисел Вам не важна тогда для получения оптимальной скорости ставим вместо short - int.
Мы же в ветке AVR, правда? Не знаю как у вас. А у меня int - 2 байта.
Цитата из EWAVR Compiler Reference. страница 83
The compiler supports all ISO/ANSI C basic data types.
INTEGER TYPES
The following table gives the size and range of each integer data type:
Data type Size Range Alignment
signed char 8 bits -128 to 127 1
unsigned char 8 bits 0 to 255 1
short, int 16 bits -32768 to 32767 1 Signed variables are stored in two’s complement form.