#c #arduino #преобразование
В языке ардуино, если писать long A = 90000; Serial.println(A); то все правильно работает, но если писать long A = 300*300; Serial.println(A); то выводит 24464. И даже если писать Serial.println(300*300); то результат тот же. В чем может быть проблема?
Ответы
Ответ 1
Похоже, что выражение 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.
Комментариев нет:
Отправить комментарий