Операции "увеличить на", "домножить на" и т.п.
В большинстве алгоритмов при выполнении операции сложения чаще всего переменная-результат операции совпадает с первым аргументом:
x = x + y;
Здесь складываются значения двух переменных x и y, результат помещается в первую переменную x. Таким образом, значение переменной x увеличивается на значение y. Подобные фрагменты встречаются в программах гораздо чаще, чем фрагменты вида
x = y + z;
где аргументы и результат различны. Рассмотрим, например, фрагмент программы, вычисляющий сумму элементов массива вещественных чисел (забегая вперед, мы используем в нем конструкцию цикла "пока"):
double a[100]; double s; int i; . . . s = 0.0; i = 0; while (i < 100) { s = s + a[i]; ++i; }
Здесь сумма элементов массива накапливается в переменной s. В строке
s = s + a[i];
к сумме s прибавляется очередной элемент массива a[i], т.е. значение s увеличивается на a[i]. В Си существует сокращенная запись операции увеличения:
s += a[i];
Оператор += читается как "увеличить на". Строка
x += y; // Увеличить значение x на y
эквивалентна в Си строке
x = x + y; // x присвоить значение x + y,
но короче и нагляднее.
Оператор вида ?= существует для любой операции ?, допустимой в Си. Например, для арифметических операций +, -, *, /, % можно использовать операции
+= увеличить на -= уменьшить на *= домножить на /= поделить на %= поделить с остатком на
к примеру, строка
x *= 2.0;
удваивает значение вещественной переменной x.
Операторы вида ?= можно использовать даже для операций ?, которые записываются двумя символами. Например, операции логического умножения и сложения (см. раздел 1.4.4) записываются в Си как && (двойной амперсенд) и || (двойная вертикальная черта). Соответственно, логические операторы "домножить на" и "увеличить на" записываются в виде &&= и ||=, например,
bool x, y; x &&= y; // эквивалентно x = x && y; x ||= y; // эквивалентно x = x || y;