Страницы

Поиск по вопросам

суббота, 27 апреля 2019 г.

В переменной типа long не помещается выражение 300*300

В языке ардуино, если писать
long A = 90000; Serial.println(A);
то все правильно работает, но если писать
long A = 300*300; Serial.println(A);
то выводит 24464. И даже если писать
Serial.println(300*300);
то результат тот же. В чем может быть проблема?


Ответ

Похоже, что выражение
long A = 300*300; ^^^^^^^^
вычисляется, как имеющее тип int, и объект типа int не может вместить в себя результирующее значение.
Запишите следующим образом
long A = ( long )300*300;
или
long A = 300l*300l;
Что касается данной инициализации
long A = 90000;
то для целочисленного литерала компилятор определяет тот целочисленный тип, который может вместить в себя данное значение.
Согласно стандарту C (6.4.4.1 Integer constants)
5 The type of an integer constant is the first of the corresponding list in which its value can be represented
И далее в таблице указывается, что когда литерал не имеет суффикса, то последовательно подбирается тип литерала в порядке int, long int, long long int

Комментариев нет:

Отправить комментарий