(unsigned long)
Оператор (unsigned long) явно приводит значение к беззнаковому 32-битному типу — особенно полезен при работе с millis() и micros(), чтобы избежать потери данных.
Полная статья
Описание
(unsigned long) — это приведение типа в стиле языка C. Оно говорит компилятору: «обращайся с этим значением как с unsigned long», то есть как с беззнаковым 32-битным целым числом в диапазоне от 0 до 4 294 967 295.
В Arduino-коде unsigned long встречается чаще всего там, где нужно работать со временем: функции millis() и micros() возвращают именно этот тип. Если вы смешиваете в выражении int и результат millis(), компилятор может выполнить неявное преобразование с потерей данных — явный каст помогает сделать намерение очевидным и избежать предупреждений.
Синтаксис
(unsigned long) x
Параметры
x: исходное значение — может быть любого числового типа.
Возвращает
Значение типа unsigned long.
Где применяется
- Приведение результата арифметики с
intкunsigned longперед сравнением сmillis(). - Явное обозначение типа при передаче числового литерала в функцию, ожидающую
unsigned long. - Преобразование знакового значения датчика к беззнаковому для побитовых операций или упаковки в протокол.
- Инициализация переменной-счётчика, которая должна корректно переполняться по правилам
unsigned long.
Практические замечания
- Когда работаете с временными интервалами через
millis(), храните иstartTime, иelapsedв переменных типаunsigned long, а неint. Иначе при переполнении счётчика (примерно через 49 дней) арифметика даст неверный результат. - Явный каст не «восстанавливает» данные: если значение уже было усечено или переполнено на предыдущем шаге,
(unsigned long)не вернёт потерянные биты. - Отрицательное знаковое число после приведения к
unsigned longстанет очень большим положительным — это математически корректно, но часто неожиданно. Проверьте, что исходное значение заведомо неотрицательно. - Если компилятор выдаёт предупреждение о сравнении знакового и беззнакового типов, явный каст — один из способов его устранить, но сначала убедитесь, что приведение логически оправдано.