long()

long(x) явно преобразует значение к 32-битному знаковому целому — незаменимо, когда диапазона int не хватает для больших счётчиков или умножения.

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

Описание

long() явно преобразует значение к типу long — 32-битному знаковому целому. Это полезно, когда диапазон int (от −32 768 до 32 767) слишком мал: например, при работе с миллисекундами, большими счётчиками или результатами умножения нескольких int-значений.

Синтаксис

  • long(x)
  • (long) x

Оба варианта равнозначны: первый — классический C-стиль приведения типов, второй — функциональный стиль Arduino.

Параметры

x: значение любого типа — целое, дробное или символ. Если передать float или double, дробная часть будет отброшена без округления.

Возвращает

Значение типа long — знаковое 32-битное целое в диапазоне от −2 147 483 648 до 2 147 483 647.

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

  • Умножение двух int-переменных, когда результат может выйти за пределы 16-битного диапазона.
  • Вычисления с millis() или micros(), которые сами возвращают unsigned long, но участвуют в знаковой арифметике.
  • Передача значения в функцию, ожидающую long-аргумент, без неявных преобразований.
  • Промежуточные вычисления в формулах, где важно избежать переполнения на ранних этапах.

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

  • Приводите операнды к long до выполнения операции, а не после: если написать long result = a * b, где a и bint, умножение всё равно произойдёт в 16-битном диапазоне и переполнится раньше, чем результат будет сохранён. Правильно: long result = (long)a * b.
  • Преобразование floatlong отбрасывает дробную часть: long(3.9) даст 3, а не 4. Если нужно округление, используйте round() перед приведением.
  • Если отрицательные значения не нужны и важен расширенный положительный диапазон (до ~4 млрд), рассмотрите unsigned long.
  • При выводе через Serial.print() значения long отображаются корректно без дополнительных преобразований.
  • Явное приведение типов делает намерения в коде очевидными и помогает избежать трудно уловимых ошибок при портировании скетча на платы с разной разрядностью int.

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