(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 станет очень большим положительным — это математически корректно, но часто неожиданно. Проверьте, что исходное значение заведомо неотрицательно.
  • Если компилятор выдаёт предупреждение о сравнении знакового и беззнакового типов, явный каст — один из способов его устранить, но сначала убедитесь, что приведение логически оправдано.

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