Главная chevron_right Структура chevron_right Арифметические операторы chevron_right - (subtraction)

- (subtraction)

Оператор - вычитает один операнд из другого — например, remaining = total - used — и возвращает разность. Для уменьшения переменной удобен сокращённый вид x -= 5;.

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

Описание

Оператор - выполняет арифметическое вычитание: из значения operand1 вычитается значение operand2, и результат записывается в переменную difference. Это одна из четырёх базовых арифметических операций в Arduino.

Синтаксис

difference = operand1 - operand2;

Параметры

  • difference: переменная, в которую записывается результат. Допустимые типы данных: int, float, double, byte, short, long.
  • operand1: переменная или константа — уменьшаемое. Допустимые типы данных: int, float, double, byte, short, long.
  • operand2: переменная или константа — вычитаемое. Допустимые типы данных: int, float, double, byte, short, long.

Пример кода

    int a = 5;
    int b = 10;
    int c = 0;
    c = a - b;  // переменная 'c' получает значение -5 после выполнения этого оператора

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

  • Вычисление разницы между текущим и предыдущим показанием датчика (например, прирост расстояния или скорость изменения температуры).
  • Отсчёт оставшегося времени или ресурса: remaining = total - used.
  • Смещение значений ШИМ или координат: сдвиг нуля в нужную точку диапазона.
  • Проверка отклонения от заданного значения (уставки) в системах управления.

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

  • Переполнение. Целочисленные типы имеют фиксированный диапазон. Если результат выходит за его нижнюю границу, значение «перепрыгивает» на максимум: например, для int вычитание 1 из −32 768 даёт 32 767. Следите за диапазонами, особенно в циклах и счётчиках.
  • Смешанные типы. Если хотя бы один из операндов имеет тип float или double, всё выражение вычисляется в арифметике с плавающей запятой. Это удобно для точных расчётов, но немного замедляет выполнение на платах без FPU.
  • Потеря дробной части. Если оба операнда — float или double, а переменная-результат объявлена как int или long, дробная часть молча отбрасывается без округления. Чтобы округлить, используйте round() перед присваиванием.
  • Беззнаковые типы. При вычитании значений типа byte или unsigned int результат тоже будет беззнаковым: если вычитаемое больше уменьшаемого, вы получите большое положительное число, а не отрицательное. Если нужен знаковый результат, явно приведите операнды к int.
  • Составное присваивание. Если нужно уменьшить переменную на некоторое значение, удобнее использовать оператор -=: x -= 5; — это то же самое, что x = x - 5;.
    float a = 5.5;
    float b = 6.6;
    int c = 0;
    c = a - b;  // переменная 'c' хранит значение -1, а не ожидаемую разность -1.1

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