Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

Выражения, операции и приоритеты

Выражение состоит из операндов, символов операций и круглых скобок.

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

Тип выражения – это тип его результата, который определяется той операцией, которая выполняется последней.

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

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

  • арифметические операции (+, –, *, /, %);

  • операции отношения (= =, !=, <, >, =>, =<);

  • логические операции (&&, ||, !);

  • логические поразрядные операции (&, \!, ^, <<, >>, \^, \, ~);

  • операции со строками (*, +=);

  • операции с указателями (&, *, ++, ==, !=);

  • операции присваивания (=, *=, /=, %=, -=, +=, <<=, >>=, &=, |=, ^=);

  • операция переименования типов данных (typedef);

  • операция преобразования типов ((тип) выражение).

Каждая из указанных операций рассматривается подробно в разделах, посвященным структурам данных в языке Си.

Операнды, участвующие в операции должны быть строго одного типа. Для операций +, –, *, / один операнд может быть целым, а другой вещественным, в этом случае результат – вещественного типа.

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

Таблица 6.

Операции и их приоритеты

Операция

Приоритет

(), [], ->

Первый (наивысший)

!, \^, ++, --, -, (TYPE) * & SIZEOF

Второй

*, /, %

Третий

+, -

Четвертый

<<, >>

Пятый

<, >, <=, >=

Шестой (низший)

Операции с более высоким приоритетом выполняются в первую очередь, далее выполняются операции с более низким приоритетом. Если же подряд следует несколько операций с равным приоритетом, то последовательность вычислений определяется ассоциативностью, которая у всех операций в Си одинакова – слева направо, кроме операций, имеющих приоритет 2  они выполняются справа налево. Приведем примеры выражений на языке Си:

  • (a || b) && !c;

  • sin(x*y / 3) / (x+cos(y % 2));

  • ((x>2.03) || (x<1.1)) && (y>0).