Освой самостоятельно С++ за 21 день.
Шрифт:
Операции
Все, в результате чего появляется некоторое значение, в языке C++ называется операцией. Об операциях говорят, что они возвращают значение. Так, операция 3+2; возвращает значение 5. Все операции являются вместе с тем и выражениями.
Возможно, вы будете удивлены тому, что многие программные блоки рассматриваются как выражения. Приведем лишь три примера:
3.2 // возвращает значение 3.2
PI // вещественная константа, которая возвращает
SecondsPerMinute // целочисленная константа, которая возвращает 60
Предполагая, что PI — константа, равная 3.14, а SecondsPerMinute — константа, равная 60, можно утверждать, что все три выражения являются операциями. Выражение
x = а + b;
не только складывает значения переменных а и b, но и присваивает результат переменной x, т.е. возвращает результат суммирования переменной x. Поэтому данное выражение вполне можно назвать операцией. Операции всегда располагаются справа от оператора присваивания:
у = x = а + b;
Данное выражение выполняет представленную ниже последовательность действий. Прибавляем а к b.
Присваиваем результат выражения а + b переменной x.
Присваиваем результат выражения присваивания x = а + b переменной у.
Если переменные а, b, x и у являются целыми и если а имеет значение 2, а b — значение 5, то переменным x и у будет присвоено значение 7.
Пример выполнения некоторых выражений представлен в листинге 4.1.
Листинг 4.1. Выполнение сложных операций
1: #include <iostream.h>
2: int main
3: {
4: int a=0, b=0, x=0, y=35;
5: cout << " a:" << a << " b:" << b;
6: cout << " x:" << x << " y:" << y << endl;
7: a = 9;
8: b = 7;
9: y = x = a+b;
10: cout << " a:" << a << " b:" << b;
11: cout << " x:" << x << " y:" << y << endl;
12: return 0;
13: }
Результат:
а: 0 b: 0 x: 0 у: 35
а: 9 b: 7 x: 16 у: 16
В строке 4 объявляются и инициализируются четыре переменные. Их значения выводятся в строках 5 и 6. В строке 7 переменной а присваивается значение 9. В строке 8 переменной b присваивается значение 7. В строке 9 значения переменных а и b суммируются, а результат присваивается переменной x. Результат операции x = a+b, в свою очередь, присваивается переменной у.
Операторы
Оператор — это литерал, который заставляет компилятор выполнять некоторое действие. Операторы воздействуют на операнды. Операндами в C++ могут быть как отдельные литералы, так и целые выражения. Язык C++ располагает двумя видами операторов:
• операторы присваивания;
• математические операторы.
Оператор присваивания
Оператор присваивания (=) позволяет заменить значение операнда, расположенного с левой стороны от знака равенства, значением, вычисляемым с правой стороны от него. Так, выражение
x = а + b;
присваивает операнду x значение, которое является результатом сложения значений переменных а и b.
Операнд, который может находиться слева от оператора присваивания, называется адресным операндом, или l-значением (от англ. слова left, т.е. левый). Операнд, который может находиться справа от оператора присваивания, называется операционным операндом, или r-значением (от англ. слова right, т.е. правый).
Константы могут быть только r-значениями и никогда не бывают адресными операндами, поскольку в ходе выполнения программы значения констант изменять нельзя. Так, можно записать:
x = 35; // правильно
Но нельзя записать:
35 = x; // ошибка!
Повторим: l-значение — это операнд, который может стоять в левой части выражения присваивания, а г-значение — операнд, который может стоять в правой части этого выражения. Обратите внимание, что все l-значения могут быть r-значениями, но не все r-значения могут быть l-значениями. Примером г-значения, которое не может быть l-значением, служит литеральная константа. Так, можно загасать: x = 5;, но нельзя записать: 5 = x; (x может быть l- или r-значением, а 5 может быть только r-значением).
Математические операторы
В C++ используется пять математических операторов: сложения (+), вычитания (-), умножения (*), целочисленного деления (/) и деления по модулю (%).
В операциях сложения и вычитания разобраться несложно: они возвращают сумму и разность двух операндов. Хотя следует отметить, что вычитание беззнаковых целых может привести к удивительным результатам, если полученная разность окажется отрицательным числом. Вы уже видели нечто подобное на прошлом занятии при описании переполнения переменных. В листинге 4.2 демонстрируется ситуация, когда из малого беззнакового числа вычитается большое беззнаковое число.
Листинг 4.2. Пример вычитания с переполнением целого числа
1: // Листинг 4.2. Пример вычитания с
2: // переполнением целого числа
3: #include <iostream.h>
4:
5: int main
6: {
7: unsigned int difference;
8: unsigned int bigNumber = 100;
9: unsigned int smallNumber = 50;
10: difference = bigNumber - smallNumber;
11: cout << "Difference is: " << difference;
12: difference = smallNumber - bigNumber;