Главная chevron_right Структура chevron_right Составные операторы chevron_right -= (compound subtraction)

-= (compound subtraction)

Оператор -= сокращает запись вычитания: x -= y делает то же самое, что x = x - y, но короче — работает с int, float, byte, long и другими числовыми типами.

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

Описание

Оператор -= — это сокращённая форма записи вычитания. Вместо того чтобы писать x = x - y, можно написать x -= y — результат одинаковый, но код становится короче и читается естественнее, особенно когда имя переменной длинное.

Оператор работает с целыми и дробными числами, поэтому подходит как для счётчиков и таймеров, так и для вычислений с плавающей точкой.

Синтаксис

x -= y; // equivalent to the expression x = x - y;

Параметры

  • x: переменная, из которой вычитается значение. Поддерживаемые типы: int, float, double, byte, short, long.
  • y: то, что вычитается — переменная или константа. Поддерживаемые типы: int, float, double, byte, short, long.

Пример кода

    x = 20;
    x -= 2; // x теперь содержит 18

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

  • Счётчик с уменьшением — например, отсчёт оставшихся попыток или секунд до события.
  • Управление яркостью — плавное уменьшение значения ШИМ при затухании светодиода.
  • Навигация и позиционирование — уменьшение координаты при движении в одну сторону.
  • Вычисление разницы накопленным итогом — когда нужно последовательно вычитать несколько слагаемых из общей суммы.

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

  • Результат записывается в x, поэтому x обязательно должен быть переменной, а не константой или литералом.
  • Следите за переполнением: если x имеет тип byte (диапазон 0–255) и вы вычтете из нуля единицу, получите 255, а не −1. Для знаковых значений используйте int или long.
  • Если x и y имеют разные типы, Arduino выполнит неявное приведение типов по стандартным правилам C++. Чтобы избежать неожиданностей, старайтесь использовать переменные одного типа или явно приводите тип через (тип).
  • Для float и double помните о погрешности представления: многократное вычитание маленьких дробных значений может накапливать ошибку округления.
  • Оператор -= не блокирует выполнение программы — это обычная арифметическая операция, которая выполняется мгновенно.

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