Последовательность выполнения операций. Приоритет операций. Скобки.



На этом шаге мы рассмотрим порядок выполения операций.

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

•                 приоритетом операций;

•                 порядком расположения операций в выражении;

•                 использованием скобок.

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

 

11. Преобразование типов (явное и неявное).При выполнении операций могут встречаться операнды различных типов. Но для выполнения операции оба операнда должны быть преобразованы к общему типу в соответствии с небольшим набором правил. Типы операндов преобразуются к общему типу в порядке увеличения их "допустимого диапазона значений". Поэтому неявные преобразования всегда идут от "меньших" объектов к "большим". В любом выражении преобразование типов может быть осуществлено явно. Для этого достаточно перед любым выражением поставить в скобках идентификатор соответствующего типа.

Вид записи операции:(тип) выражение; Ее результат - значение выражения, преобразованное к заданному типу представления. Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагаются на програм­ми­ста. Рекомендуется использовать эту операцию в исключительных случаях.

Арифметические операции

Арифметические операции - бинарные. Перечень арифметических операций и их обозначений: + сложение;- вычитание (либо унарная операция - изменение знака);* умножение;/ деление (для int операндов - с отбрасыванием остатка);

% остаток от деления целочисленных операндов, со знаком первого операнда (деление по модулю).Операндами традиционных арифметических операций (+ - * /) могут быть константы, переменные, элементы массивов, любые арифметические выражения.

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

1.выражения в круглых скобках; 2.функции (стандартные математические, функции пользователя); 3.* / % выполняются слева направо;+ ─ слева направо. Порядок выполнения операций можно определять круглыми скобками, тогда выражение в скобках выполняется в первую очередь (слева направо).

Унарные операции + и – обладают самым высоким приоритетом, определены только для целых и вещественных операндов; «+» не выполняет никаких действий (введен лишь для полноты), а результатом «–» является значение операнда с противоположным знаком.

Таким образом, так как операции *, /, % обладают высшим приоритетом над операциями +, -, при записи сложных выражений нужно использовать общеприня­тые математические правила.

Схема выполнения преобразований операндов арифметических операций:

 short, char® int ® unsigned ® long ® double… float ® double

При этом действуют следующие правила:

значения типов char и short всегда преобразуются в int (даже если оба операнда имеют одинаковый тип);.аналогично, значения типа float всегда преобразуются в double;

.после этого определяется "старший" из двух типов операндов, и другой операнд преобразуется к этому типу. Порядок "старшинства":

 

13.Операции отношений и логические операции. Перечень логических операций в порядке убывания относительного приоритета и их обозначения: ! - отрицание (логическое НЕТ); && - коньюнкция (логическое И); || - дизьюнкция (логическое ИЛИ). Общий вид операции отрицания: ! <выражение>

Общий вид операций коньюнкции и дизьюнкции <выражение1> <знак_операции> <выражение2>

Например: y>0 && x==7 ® истина, если 1-е и 2-е выражения истинны;

e>0 || x==7 ® истина, если хотя бы одно выражение истинно. Ненулевое значение операнда трактуется как "истина", а нулевое - "ложь". 

Пример правильной записи двойного неравенства: 0<x<100→(0<x)&&(x<100)

Операции сравнения – это операции, в которых значения двух переменных сравниваются друг с другом. == равно или эквивалентно; != - не равно; < - меньше; <= - меньше либо равно; > - больше; >= - больше либо равно. Пары символов соответствующих операций разделять нельзя. Общий вид операций отношений: <выражение1> <знак_операции> <выражение2>

Общие правила:.операндами могут быть любые базовые (скалярные) типы;

.значения операндов перед сравнением преобразуются к одному типу;.результат операции отношения - целое значение 1, если отношение истинно, или 0 в противном случае. Следовательно, операция отношения может использоваться в любых арифметических выражениях.

 

14.Операция присваивания. Сокращенные формы записи операции присваивания. Префиксная и постфиксная запись. Формат операции присваивания: Операнд_1 = Операнд_2

Операндом_1 может быть только переменная. Этот (левый) операнд операции присваивания получил название L–значение, (Lvalue, Leftvalue). Операндом_2 может быть любое выражение, составленное в соответствии с синтаксисом языка Си. Этот (правый) операнд операции присваивания назвали R–значение, (R–value, Right–value).

Операция присваивания может быть как отдельным оператором (тогда после нее ставится « ; »), так и частью другого выражения (тогда ее результатом считается присвоенное значение). Если в выражении подряд без скобок идут несколько операций « = », то они выполняются справа налево. В языке Си используются два вида сокращенной записи операции присваивания:

1) вместо записи: v = v # e; где # – любая арифметическая или битовая операция, рекомендуется использовать запись 

v #= e 2) вместо записи: x = x # 1;

где # означает «+» либо «-» , x – переменная одного из целочисленных типов (или переменная-указатель), рекомендуется использовать запись:                       

##x; – префиксную, или x##; – постфиксную. Если эти операции используются в отдельном виде, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то в префиксной форме (##x), сначала значение x изменится на 1, а затем будет использовано в выражении; в постфиксной форме (x##) – сначала значение используется в выражении, а затем изменяется на 1. Рекомендации использования сокращений обоснованы возможностью оптимизации программы (ускорение в работе программы), т.к. схема выражения вида v #= e соответствует схеме выполнения многих машинных команд типа "регистр-память".

 


Дата добавления: 2018-08-06; просмотров: 732; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!