Приоритеты рассмотренных операций

Операция sizeof

Условная операция

Операции составного присваивания

Операции этой группы перечислены в следующей таблице:

 

Операция Использование Эквивалент
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
+= a += b a = a + b
-= a -= b a = a - b
<<= a <<= b a = a << b
>>= a >>= b a = a >> b
&= a &= b a = a & b
|= a |= b a = a | b
^= a ^= b a = a ^ b

 

Общий формат записи выражений с использованием этих операций:

 

< Переменная > < Операция >= < Выражение >

 

Эквивалентом этого формата в общем случае является:

 

< Переменная > = < Переменная > < Операция > < Выражение >

 

Таким образом, выражение с использованием составного присваивания (столбец "Использование") является укороченной формой записи соответствующего эквивалентного выражения (столбец "Эквивалент").

Единственная в C++ тернарная операция. Формат записи:

 

< Условие > ? < Выражение 1 > : < Выражение 2 >

| | |

Операнд 1 Операнд 2 Операнд 3

"Условие" - любое выражение, результатом которого является число или логическое значение. Значение "Условия" трактуется как логическое значение (0 - false; любое не равное 0 значение - true). Если значение первого операнда true (не равное 0), то значение этого условного выражения будет равно значению второго операнда (Выражение 1). Если же значение первого операнда false (0), то значение этого условного выражения будет равно значению третьего операнда (Выражение 2).

Например:

 

// Переменной max присваивается наибольшее из a и b значение

int max = a > b ? a : b;

 

Условные выражения можно вкладывать друг в друга. Например:

 

// Переменной max присваивается наибольшее из a, b и c значение

int max = a > b ? (a > c ? a : c) : (b > c ? b : c);

 

Часто условное выражение используется для вывода на экран одного из значений, в зависимости от некоторого условия. Например:

 

cout << (a > b ? a : b) << endl;// Выводится наибольшее из a и b

Операция sizeof предназначена для определения объема памяти в байтах, требующегося для размещения некоторого объекта или типа данных. Имеет две формы:

 

sizeof < Выражение >

или

sizeof (< Тип данных >)

 

Например:

 

long a = 0;

double d;

cout << sizeof (double) << endl; //Выведено8

cout << sizeof (5 / 3) << endl; //Выведено4

cout << sizeof a << endl; //Выведено4

cout << sizeof (a + 3.14f) << endl; //Выведено4

cout << sizeof (d = a + 3.14f) << endl; //Выведено8

Результат вычисления выражений зависит от приоритета операций и от порядка выполнения операций с одинаковым приоритетом.

Для правильной записи выражений очень важно знать, в каком порядке выполняются операции внутри выражения. Например:

 

5 + 4 * 3 / 2 + 3

 

Если выполнить операции слева направо, то результат будет равен 16:

 

5 + 4 = 9

9 * 3 = 27

27 / 2 = 13

13 + 3 = 16

 

Но, поскольку, операции умножения и деления имеют одинаковый приоритет, и он выше, чем у операции сложения, на самом деле результат будет равен 14:

 

4 * 3 = 12

12 / 6 = 6

5 + 6 = 11

11 + 3 = 14

 

В арифметических и логических выражениях операции с одинаковым приоритетом выполняются слева направо. А вот выражения с операторами присваивания выполняются справа налево.

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

 

 

Операция Действие
++ Постфиксный оператор инкремента
-- Постфиксный оператор декремента
++ Префиксный оператор инкремента
-- Префиксный оператор декремента
! Логическое «НЕ»
- Унарный минус
+ Унарный плюс
тип Явное преобразование типа
sizeof Получение размерности операнда в байтах
* Умножение
/ Деление
% Остаток (деление по модулю)
+ Сложение
- Вычитание
<< Сдвиг влево
>> Сдвиг вправо
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно
== Равно
!= Не равно
& Побитовое «И»
^ Побитовое исключающее «ИЛИ»
| Побитовое «ИЛИ»
&& Логическое «И»
|| Логическое «ИЛИ»
? : Условная операция
=, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= Простое и составные присваивания

 

Изменить порядок выполнения операций внутри выражения можно с помощью круглых скобок. В любом случае, когда возникают сомнения в определении приоритета выполнения операций лучше использовать круглые скобки (на первых порах это особенно рекомендуется).