[an error occurred while processing this directive] [an error occurred while processing this directive]
Есть ли тут любители AVR GCC и знатоки ANSI C ? Взялся свой код сделать удобочитаемым и наткнулся на интересную вещь(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено АндрейК 31 января 2002 г. 17:21

Когда пишешь в #define выражение

#define IPRED_140   (uint) (0x3FF * 14 / 15 * 45 / 50)

результат получается неправильный:
хочется получить 0x35B, а получается 0xFE3C, т.к. после вычисления "0x3FF*14/15*45" получается результат 42966 и он расценивается, как -22570
ТО ЕСТЬ препроцессор обрабатывает все, как signed int
а вот теперь ВНИМАНИЕ если напишешь:
#define IPRED_140   (uint) (0x3FF * 0.014 / 0.015 * 4.5 / 5)

то все получается нормально и даже точность не теряется, т.е. теперь препроцессор обрабатывает все как float
это особенности компилятора или языка С вообще ?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru