Введение в программирование

       

Операции


При вычислении выражений учитывается приоритет операций: сначала выполняются операции с более высоким приоритетом.

Вычисление выражений, имеющих операции с одинаковым приоритетом, производится в соответствии с правилом сочетательности, которое определяет порядок выполнения таких операций. В языке С сочетательность операций применяется как слева направо, так и справа налево (как и при вычислении возведения в степень). Порядок вычисления справа налево означает, что выражение x** 2**4 трактуется как x**(2**4).

В следующей таблице приведены в убывающем порядке уровни приоритета операций языка С.

Таблица 3.1. Уровни приоритета операций языка С.

Уровни приоритетаОперацииПорядок выполнения операций
Скобки( ), [ ]слева направо
Индексы, вызов функцийx[i], fun()слева направо
Постфиксный инкремент и декремент++, --слева направо
Префиксный инкремент и декремент++, --слева направо
Унарный минус-слева направо
Поразрядное отрицание (NOT)~слева направо
Размер объектаsizeofслева направо
Логическое отрицание!слева направо
Получение адреса и разименование&, *справа налево
Явное приведение типа(any_type)слева направо
Умножение, деление, деление по модулю*, / , %слева направо
Сложение, вычитание+, -слева направо
Сдвиг влево, сдвиг вправо<<, >>слева направо
Сравнение (меньше, больше, меньше или равно, больше или равно)<, >, <=, >=слева направо
Сравнение (тождественное равенство, неравенство)==, !=слева направо
Поразрядное логическое И&слева направо
Поразрядное исключающее ИЛИ (XOR)^слева направо
Поразрядное логическое ИЛИ|слева направо
Логическое И (AND)&&слева направо
Логическое ИЛИ (OR)||слева направо
Условная операция?:справа налево
Операция перед присваиванием=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=справа налево

Операции AND, OR, NOT и XOR относятся к логическим операциям. Следующая таблица показывает результаты применения логических операций.

Таблица 3.2. Результаты применения логических операций.

xyx && y (x AND y)x || y (x OR y)! x (NOT x)x ^ y (x XOR y)
0 (false)0 (false)0010
0 (false)1 (true)0111
1 (true)0 (false)0101
1 (true)1 (true)1100


Единственной операцией, имеющей три операнда, является операция "условие" (называемая также условной операцией).

Условная операция имеет следующий формальный синтаксис:

(expr_log) ? expr1:expr2.

Если выражение expr_log принимает значение true, то условная операция возвращает значение expr1, а если false, то значение expr2.

Например:

// x примет значение 1, если y>z. x=(y>z)? 1:0;

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

value<<count_of_position value>>count_of_position.

Например, выражение 9<<2 вычисляется следующим образом: число 9 имеет в двоичном представлении значение 001001 (118) и при сдвиге его на два разряда влево получается значение 100100 (448).

Операции инкремента и декремента соответственно увеличивают или уменьшают значение операнда на 1. Различают постфиксный и префиксный инкремент и декремент. Например, выражение x++ возвращает значение переменной х, а затем увеличивает его на 1, а выражение ++x увеличивает значение x на 1 и возвращает его.

Операция присваивания в различных языках имеет разное обозначение. Так, в языках С, C++, Java операция присваивания обозначается символом =. Например, x=y+z;. Язык С позволяет в одном операторе указывать несколько операций присваивания. Например: x1=x2=y+z;. В языках Pascal и ALGOL операция присваивания указывается символами :=. Например: x:=y+z;. В языке LISP операция присваивания обозначается функцией SETQ (например, (SETQ x (PLUS y z))).


Содержание раздела