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>— они всегда имеют фиксированный размер.