Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по основам алгоритмизации и программи....doc
Скачиваний:
41
Добавлен:
02.11.2018
Размер:
2.69 Mб
Скачать

Порядок выполнения операций

Изменение порядка выполнения операций в выражении может привести к различным результатам, следовательно, требуется ввести набор непротиворечи­вых правил, определяющих порядок действий. В С(С++) это осуществляется путем задания приоритета той или иной операции. Приоритет - это уровень старшин­ства (первоочередности выполнения) операции. Если несколько операций имеют один и тот же уровень приоритета, то они выполняются в том порядке, в котором записаны в операторе (выражении). Операции деления и умножения имеют более высокий приоритет по сравнению со сложением и вычитанием. Это означает, что в операторе i=35*j-k вначале выполняется 35*j, затем из полу­ченного значения вычитается k. Если требуется, чтобы сложение или (и) вычи­тание в операторе выполнялось ранее деления и умножения, необходимо ис­пользовать механизм скобок. Так, в операторе i=35*(j+k) вначале выполняется (j+k), затем умножение.

Приоритет операций

В приведенной ниже табл.5 показан приоритет (порядок вычисления) операций языка С(С++). Операции упорядочены по приоритету сверху вниз.

Необходимо отметить, что если в вычисляемом выражении (или его неко­торой части) скобки отсутствуют, то порядок вычисления составляющих его

Таблица 5.

Операция

Приоритет

() [] -> .

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

! ~ ++ — + - * & sizeof

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

* / %

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

+ -

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

<< >>

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

< <= > >=

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

== !=

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

&

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

^

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

|

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

&&

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

||

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

?:

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

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

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

операндов в С(С++) (как и в ряде других языков) не фиксирован. Это означает, что если в выражении х=операнд1 + операнд2 значение операнда1 влияет на величину операнда2, то не обязательно значение операнда1 будет вычислено ранее операнда2.

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

printf(“%d %d”,n++,n+i);

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

n++;

printf(”%d %d”,n,n+i);