Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10575 / 333 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 3:

Управление последовательностью действий

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Операции

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

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

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

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

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

Таблица 3.2. Результаты применения логических операций.
x y x && y (x AND y) x || y (x OR y) ! x (NOT x) x ^ y (x XOR y)
0 ( false ) 0 ( false ) 0 0 1 0
0 ( false ) 1 ( true ) 0 1 1 1
1 ( true ) 0 ( false ) 0 1 0 1
1 ( true ) 1 ( true ) 1 1 0 0

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

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

(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)) ).

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Денис Комаров
Денис Комаров
Россия, Москва