Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_3_Osnovy_yazyka.doc
Скачиваний:
35
Добавлен:
29.02.2016
Размер:
179.71 Кб
Скачать

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

Порядок выполнения операций при вычислении значения выражения определяется расположением знаков операций, круглых скобок и приоритетом операций. Операции с наивысшим приоритетом выполняются в первую очередь. Если в выражении содержится несколько операций одного приоритета на одном и том же уровне, то их обработка производится в соответствии с порядком выполнения – справа налево или слева направо. Если необходимо изменить порядок выполнения операций в выражении, то следует использовать круглые скобки, например (x + y) * z.

Приоритет операции запятая ниже, чем у всех остальных операций.

В приведенной ниже таблице операции языка C++ приведены в порядке убывания приоритета. Операции с разными приоритетами разделены чертой.

Таблица приоритетов операций

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

Названия операций

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

( )

++

--

повышение приоритета

постфиксный инкремент

постфиксный декремент

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

sizeof

++

--

~

!

- +

(тип)выражение и

тип (выражение)

размер операнда в байтах

префиксный инкремент

префиксный декремент

поразрядное НЕ

логическое НЕ

унарные минус, плюс

преобразование типа

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

*

/

%

умножение

деление

остаток от деления целых

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

+

-

сложение

вычитание

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

<<

>>

сдвиг влево

сдвиг вправо

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

<

<=

>

>=

меньше

меньше или равно

больше

больше или равно

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

==

!=

равно

не равно

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

&

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

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

^

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

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

|

поразрядное ИЛИ

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

&&

логическое И

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

||

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

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

? :

условная

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

=

*=, /=, %=

+=, -=

<<=, >>=

&=, |=, ^=

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

составное)

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

,

операция запятая

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

Приведение (преобразование) типа

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

Автоматически производятся лишь преобразования, которые преобразуют операнды с меньшим диапазоном значений в операнды с большим диапазоном значений, поскольку это происходит без какой-либо потери информации. Например, если в выражении ival + fval переменная ival типа int, а переменная fval – типа float, то при выполнении операции (+) значение переменной ival будет приведено к типу float.

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

Для любого выражения можно явно указать преобразование его типа, используя унарную операцию, называемую приведением (преобразованием) типа. Операция может быть записана в двух форматах:

(тип) выражение

тип (выражение)

Операндом операции приведения типа является преобразуемое выражение. Приоритет операции приведения типа такой же, как и у других унарных операций. Например: (long double)5; (int)f; (double)a/2.

Если рассматриваемое выражение имеет достаточно сложный вид, желательно брать его в скобки, чтобы убедится, что тип будет изменен у результата всего выражения, а не у его части. Например,

(int)x + b * c

(int)( x + b * c )

В первом случае преобразование относится к переменной x, во втором – ко всему выражению x+ b * c.

12

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]