Это пример проблемы, с которой я сталкиваюсь в RobotC 3.62:
long heading;
task main()
{
long num = 0;
heading=num+90000;
}
Это дает результат heading=24464
, чего я не ожидал.
Я попытался заменить часть 90000 длинной, содержащей 90000, и это дало ожидаемый результат. Кажется, что запись числа 90000 вызывает какую-то ошибку переполнения (90000-256^2=24464)
. Это странно, так как long должен содержать «целое число в диапазоне от -2 147 483 648 до 2 147 483 647». Нужно ли мне его как-то кастрировать? Я не знаком с C, может ли кто-нибудь объяснить это поведение? Спасибо!
stdint.h
? У него естьtypedef
, напримерint32_t
, иdefines
, напримерINT32_MAX
. - person Fiddling Bits   schedule 14.01.2015