Последовательность выполнения операций. Приоритет операций. Скобки.
На этом шаге мы рассмотрим порядок выполения операций.
Последовательность выполнения операций определяется тремя факторами:
• приоритетом операций;
• порядком расположения операций в выражении;
• использованием скобок.
По приоритету все операции делятся на четыре группы. Операции первого (высшего) приоритета выполняются в первую очередь. Операции четвертого (низшего) приоритета выполняются в последнюю очередь. Операции с равным приоритетом выполняются слева направо, но иногда компилятор для генерации более оптимального кода может переупорядочить операнды. Скобки служат для изменения обычного порядка обработки операций. Подвыражение, заключенное в скобки, сначала вычисляется как отдельный операнд, а затем его результат используется для выполнения операций, обрамляющих скобки.
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–значение, (L–value, Left–value). Операндом_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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!