- (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