Справочник языка Cи



         

Приоритет и порядок выполнения


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

В таблице 4.1 приведены операции в порядке убывания приоритета. Операции, расположенные в одной строке таблицы, или объединенные в одну группу, имеют одинаковый приоритет и одинаковую ассоциативность.

Таблица 4.1.

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

Знак операции

Наименование

Ассоциативность

() [] . ->

Первичные

Слева направо

+ - ~ ! * & ++ -- sizeof приведение типа

Унарные

Справа налево

* / %

Мультипликативные

Слева направо

+ -

Аддитивные

Слева направо

>> <<

Сдвиг

Слева направо

< > <= >=

Отношение

Слева направо

== !=

Отношение

Слева направо

&

Поразрядное И

Слева направо

^

Поразрядное исключающее ИЛИ

Слева направо

|

Поразрядное включающее ИЛИ

Слева направо

&&

Логическое И

Слева направо

||

Логическое ИЛИ

Слева направо

?:

Условная

Справа налево

= *= /= %= += -= <<= >>= &= |= ^=

Простое и составное присваивание

Справа налево

,

Последовательное вычисление

Слева направо

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

Выражение может содержать несколько операций одного приоритета. Когда несколько операций одного и того же уровня приоритета появляются в выражении, то они применяются в соответствии

с их ассоциативностью — либо справа налево, либо слева направо.

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




Содержание  Назад  Вперед