Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3333 / 380 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 3:

Высказывания и предикаты

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

Приоритеты и ассоциативность операторов языка Java

При вычислении значения выражения в языке Java важны не только приоритеты, но и ассоциативность операторов.

Определение 3.20. Оператор @ является левоассоциативным, если выражение a @ b @ c вычисляется, как (a @ b) @ c ; правоассоциативным, если оно эквивалентно a @ (b @ c) ; неассоциативным — если запись a @ b @ c не имеет смысла.

В этом определении символ @ означает любой из бинарных операторов языка.

Использование круглых скобок для группировки всегда позволяет изменить порядок вычислений, так как выражения в скобках вычисляются в первую очередь. Иногда даже формально лишние скобки в выражении полезны — они облегчают правильное восприятие.

В таблице 3.5 все операторы языка Java разбиты на группы с одинаковым приоритетом (операторы с приоритетом 1 выполняются в первую очередь), левоассоциативность обозначена символом \longrightarrow, а правоассоциативность — символом \longleftarrow.

Таблица 3.5. Приоритеты и ассоциативность операторов
Пр-т Оператор Тип опер. Асс-ть Операция
1 ++ числовой \longleftarrow пре- и постинкремент
-- числовой \longleftarrow пре- и постдекремент
+, - числовой \longleftarrow унарныe плюс и минус
~ целый \longleftarrow побитовое дополнение
! логический \longleftarrow логическое отрицание
(type) любой \longleftarrow преобразование типа
2 *, /, % числовой \longrightarrow умножение, деление и остаток
3 +, - числовой \longrightarrow сложение и вычитание
+ строковый \longrightarrow конкатенация строк
4 << целый \longrightarrow сдвиг влево
>> целый \longrightarrow сдвиг вправо с размножением знакового бита
>>> целый \longrightarrow сдвиг вправо с размножением нуля
5 <, <= числовой \longrightarrow меньше, меньше или равно
>, >= числовой \longrightarrow больше, больше или равно
instanceof объект,тип \longrightarrow сравнение типов
6 == простой \longrightarrow равенство значений простых типов
!= простой \longrightarrow неравенство значений простых типов
== объект \longrightarrow равенство ссылок на объекты
!= объект \longrightarrow неравенство ссылок на объекты
7 & целый \longrightarrow побитовое И
& логический \longrightarrow логическое И
8 ^ целый \longrightarrow побитовое исключающее Или
^ логический \longrightarrow логическое исключающее Или
9 | целый \longrightarrow побитовое Или
| логический \longrightarrow логическое Или
10 && логический \longrightarrow условное И
11 || логический \longrightarrow условное Или
12 ?: логический, любой, любой \longleftarrow оператор условия
13 = любой \longleftarrow присваивание, присваивание с операцией
*=, /=, %=
+=, -=
<<=, >>=
>>>=, &=
^=, |=

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

Задачи для самостоятельного решения

Задача 3.6.Докажите, что выражение ((e_1\land (e_2\lor e_3)) =
((e_1\land e_2)\lor (e_1\land e_3))) является предикатом.

Задача 3.7.Докажите, что выражение ((a\lor a) — не предикат.

Задача 3.8.Изобразите деревья вывода для каждого из законов эквивалентности.

Задача 3.9.Покажите, что все законы эквивалентности являются тавтологиями.

Задача 3.9.Решите задачу о банке с кофейными зернами (см. задачу 3.1)

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева