В языке ардуино, если писать
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
Комментариев нет:
Отправить комментарий