int()

int() явно приводит значение к целому типу int, отбрасывая дробную часть в сторону нуля: int(3.9) вернёт 3, а не 4.

Полная статья

Описание

int() явно преобразует значение к типу int — базовому целочисленному типу в Arduino. Это удобно, когда нужно отбросить дробную часть числа или привести значение другого типа к целому перед дальнейшими вычислениями.

Синтаксис

  • int(x)
  • (int) x

Параметры

x: значение любого типа — float, long, byte, char и т. д.

Возвращает

Значение типа int.

Как работает преобразование

Когда вы передаёте в int() число с плавающей точкой, дробная часть просто отбрасывается — без округления, в сторону нуля. Например, int(3.9) вернёт 3, а int(-3.9) вернёт -3. Это называется усечением (truncation), и его легко перепутать с округлением: помните, что 3.9 не станет 4.

Если вы хотите именно округлить, воспользуйтесь функцией round() перед преобразованием.

Где применяется

  • Работа с датчиками. Показания аналогового датчика часто нужно привести к целому числу перед выводом в Serial Monitor или сравнением с порогом.
  • Деление с отбрасыванием остатка. Если результат деления двух int нужен как целое, явное приведение помогает избежать путаницы с типами.
  • Совместимость типов. Когда функция ожидает int, а у вас float или long, int() делает намерение явным и устраняет предупреждения компилятора.
  • Индексация массивов. Вычисленный индекс в виде float нужно привести к int перед обращением к элементу массива.

Практические замечания

  • При преобразовании float в int дробная часть отбрасывается в сторону нуля: int(3.9) даст 3.
  • Размер и диапазон int зависят от архитектуры платы. На AVR (Uno, Nano, Mega) это обычно 16 бит: от −32 768 до 32 767. На платах с 32-битным процессором (Due, ESP32, SAMD-платы) int занимает 32 бита и покрывает значительно больший диапазон.
  • Если исходное значение выходит за пределы диапазона int на вашей плате, результат будет некорректным — произойдёт переполнение. Проверяйте диапазон, особенно при работе с long или большими float.
  • Альтернативная запись (int) x делает то же самое и встречается в коде на C/C++ чаще, чем функциональный синтаксис int(x). Оба варианта равнозначны.
  • Если вы не уверены в разрядности int на целевой плате, используйте int16_t или int32_t из <stdint.h> — они всегда имеют фиксированный размер.

Полезные материалы