Страницы

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

понедельник, 10 февраля 2020 г.

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

#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.

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

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