int

Тип int хранит целые числа и чаще всего используется в Arduino-скетчах: его размер зависит от платы — 16 бит на ATmega и 32 бита на Due/SAMD.

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

Описание

Тип int — целочисленный тип данных, который используется чаще всего, когда нужно хранить целые числа: счётчики, показания датчиков, номера пинов, результаты вычислений и так далее.

Размер int зависит от платы:

  • На Arduino UNO и других платах на базе ATmega — 16 бит (2 байта). Диапазон значений: от −32 768 до 32 767.
  • На Arduino Due и платах на базе SAMD (например, MKR 1000 WiFi и Zero) — 32 бита (4 байта). Диапазон значений: от −2 147 483 648 до 2 147 483 647.

Это важно учитывать, если вы пишете код, который должен работать на разных платах: одно и то же объявление int может вести себя по-разному в зависимости от архитектуры.

Отрицательные числа хранятся в формате дополнительного кода (two's complement): старший бит обозначает знак, остальные биты инвертируются и к результату прибавляется единица. На практике вам не нужно думать об этом — Arduino выполняет арифметику с отрицательными числами автоматически и корректно. Однако при побитовых операциях или смешивании знаковых и беззнаковых типов могут возникнуть неожиданные эффекты. оператор битового сдвига вправо (>>)

Синтаксис

int var = val;

Параметры

  • var: имя переменной — любой допустимый идентификатор на ваш выбор
  • val: начальное значение, которое присваивается переменной при объявлении

Пример кода

Пример создаёт переменную-счётчик, которая увеличивается на 1 при каждом проходе loop() и выводится в Serial Monitor.

    int countUp = 0;            //создаём целочисленную переменную 'countUp'

    void setup() {
      Serial.begin(9600);       // выводим число через последовательный порт
    }

    void loop() {
      countUp++;                //увеличиваем countUp на 1 при каждом проходе цикла
      Serial.println(countUp);  // выводим текущее значение countUp
      delay(1000);
    }

Примечания и предупреждения

Переполнение. Если значение переменной выходит за пределы допустимого диапазона, происходит переполнение. Поведение при этом непредсказуемо: переменная может «перескочить» от максимального значения к минимальному или дать совершенно неожиданный результат. Например, на UNO значение 32 767 после прибавления 1 может стать −32 768. Переполнения нужно избегать — следите за диапазоном значений в вычислениях.

Если вам нужно именно такое «кольцевое» поведение, используйте unsigned int.

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

  • Счётчики и циклы — классический сценарий: переменная-счётчик в for или while.
  • Показания датчиков — например, результат analogRead() возвращает значение от 0 до 1023, которое отлично помещается в int.
  • Хранение координат или позиций — когда значения могут быть отрицательными, в отличие от unsigned int.
  • Промежуточные вычисления — арифметика с небольшими целыми числами, где не нужна дробная часть.

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

  • На UNO максимум для int — 32 767. Если ваш счётчик или результат вычисления может превысить это значение, используйте long.
  • Если значение всегда неотрицательное и нужен больший диапазон, рассмотрите unsigned int (0–65 535 на UNO).
  • При смешивании int и unsigned int в одном выражении компилятор может неявно привести типы — это частая причина трудноуловимых ошибок. Явное приведение типов помогает избежать сюрпризов.
  • Если скетч должен одинаково работать на UNO и Due, не полагайтесь на конкретный размер int. Для гарантированного размера используйте типы из <stdint.h>: int16_t или int32_t.
  • Для отладки переполнения удобно выводить значение в Serial Monitor перед и после операции, которая вызывает подозрения.

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