Глава 2
Выражения и операторы
Арифметические операции.
Оператор присваивания
Для осуществления манипуляций с данными C++ располагает широким набором операций. Операции представляют собой некоторое действие, выполняемое над одним (унарная) или несколькими операндами (бинарная операция), результатом которого является возвращаемое значение. К базовым арифметическим операциям можно отнести операции сложения (+), вычитания (-), умножения (*), деления (/) и взятия по модулю (%), то есть вычисления остатка от деления левого операнда на правый.
Для эффективного использования возвращаемого операциями значения предназначен оператор присваивания (=) и его модификации: сложение с присваиванием (+=). вычитание с присваиванием (-=), умножение с присваиванием (*=). деление с присваиванием (/=), модуль с присваиванием (%=) и ряд других, которые будут рассмотрены позже.
В приведенном ниже листинге представлены примеры некоторых операций.
iinclude <iostream.h> int main()
{
int а=0,b=4,с=90;
char z = '\n';
a = b; // a=4
cout « a « z;
a = b + c + с + Ь; // a=4+90+90+4=188
cout « a « z;
a = b - 2; // a=2
cout « a « z;
а = Ь * 3; // а=4*3=12
cout « а « z;
а = с / (Ь + 6) ; // а=90/(4+6)=9
cout « а « z;
cout « а%2 « z; // 9%2=1
а += Ь; // а=а+b=9+4=13
а *= с - 50; // а=13*(90-50)=520
a -= 38; // а=520-38=482
cout « a « z;
а %= 8; // а=482%8=2
cout « а « z;
return 0;
}
В приведенном фрагменте производится инициализация объявленных переменных начальными значениями с последующей демонстрацией работы операторов присваивания, операции сложения, вычитания, умножения, деления, скобки, вычисления остатка от деления, а также различные модификации оператора присваивания.
В результате работы программа выведет столбец из цифр: 4 188 2 12 9 1 482 2
На практике также довольно широко используется пустой оператор:
;
Такая форма оператора в программном коде не выполняет никаких действий, но позволяет компилятору обходить требования синтаксиса на наличие оператора в некоторых конструкциях.
Понятие выражения
Выражение в C++ представляет собой последовательность операторов, операндов и знаков пунктуации, воспринимаемую компилятором как руководство к определенному действию над данными. Всякое выражение, за которым идет точка с запятой, образует предложение или инструкцию языка:
выражение;
На практике возможны также случаи, когда сами операнды в выражениях могут быть представлены выражениями.
Приведем примеры предложений языка:
х = 3 * (y + 2.48);
у = My_Func(dev, 9, i);
Операторы инкремента и декремента
Как и в Ассемблере, в C++ имеется эффективное средство увеличения и уменьшения значения операнда на единицу — унарные операторы инкремента (++) и декремента (--).
Унарные операторы инкремента/декремента преобразуются компилятором в машинный код однозначно и на языке Ассемблера могут выглядеть так:
инкремент: INC N
декремент: DEC N
где N может быть либо регистром процессора, либо содержимым ячейки памяти.
По отношению к операнду данный вид операторов может быть префиксным или постфиксным. Префиксный оператор применяется к операнду перед использованием полученного результата. Постфиксный оператор применяется к операнду после использования операнда.
Понятие префикса и постфикса имеет смысл только в выражениях с присваиванием:
х = y++; // постфикс
index = --current; // префикс
count++; // унарная операция;
// то же, что ++count; abc--; // то же, что --abc;
Здесь переменная у сначала присваивается переменной х, а затем увеличивается на единицу. Переменная current сначала уменьшается на единицу, после чего результат присваивается переменной index.