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

15.2. Основные операции

Операции выполняются в порядке увеличения их приоритета. Основные операции перечислены в табл. 15.2.

Приори­тет

Операция

Название

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

1

()

Скобки, вызов функции

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

[]

Индекс элемента массива

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

.

Выделение элемента структуры или

Объединения

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

->

Выделение элемента структуры (объеди­нения), адресуемой (го) указателем

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

2

!

Логическое отрицание

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

-

Изменение знака

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

++

Увеличение на единицу

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

--

Уменьшение на единицу

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

&

Адрес значения переменной

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

*

Значение по указанному адресу

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

3

*

Умножение

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

/

Деление

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

%

Остаток от деления

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

4

+

Сложение

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

-

Вычитание

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

5

<

Меньше

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

<=

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

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

>

Больше

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

>=

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

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

6

==

Равно

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

!=

Не равно

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

7

&&

Логическое И

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

8

||

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

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

9

?:

Условная операция

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

14

=

Присваивание

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

*=

Умножение и присваивание

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

/=

Деление и присваивание

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

%=

Остаток и присваивание

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

+=

Сложение и присваивание

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

-=

Вычитание и присваивание

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

Таблица 15.2. Дадим пояснения по некоторым операциям.

Следует подчеркнуть особенность операции деления. Эта операция дает целый результат, если оба операнда целые. Например, выражение 9/5 даст результат, равный единице. Чтобы получить действительный результат, необходимо иметь хотя бы один действительный операнд. Так, 9./5 будет равно 1.8.

Операции увеличения на единицу (инкремента) «++» и операция уменьшения на единицу (декремента) «--» имеют префиксную (++n или --n) и постфиксную (n++ или n--) формы записи. В первом случае значение операнда n сначала изменяется, а затем используется для дальнейших вычислений, во втором же случае n сначала используется, а затем изменяется. Так, например, выражение а + b++ означает «сложить а и b и увеличить значение b на единицу», а а + ++b – «увеличить значение b на единицу и сложить а и b».

Операция & применяется к идентификатору переменной, а операция * к выражению, имеющему значение адреса (указателя), так, например, a и *&a эквивалентны.

Для операций логического И (&&), логического ИЛИ (||) и условной (?:) гарантируется, что левый операнд будет обрабатываться первым. Для остальных операций порядок обработки операндов может быть различным на разных компиляторах.

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

  • char и short преобразуются в int;

  • float преобразуется в double;

  • если один из операндов двойной точности, то другие приводятся к двойной точности и результат будет типа double;

  • если один из операндов типа long, то другие преобразуются в long и результат будет long

  • если один из операндов unsigned, то другие преобразуются в тип unsigned, и результат будет иметь тип unsigned;

  • в противном случае операнды должны быть типа int и результат будет типа int.

Преобразование типов происходит и при выполнении операции присваивания: значение выражения справа преобразуется в тип переменной слева, при этом если преобразование идет от длинного типа к более короткому, то старшие разряды теряются. Выражение может содержать несколько операций присваивания. Например: a=b=c=0. Операции присваивания этого выражения выполняются в порядке справа налево (см. табл. 1.2): выражение с=0 принимает значение 0; попутно переменная с принимает значение 0; выражение b=c=0 принимает значение 0; попутно переменная b принимает значение 0; выражение a=b=c=0 принимает значение 0; попутно переменная a принимает значение 0. В языке С имеются несколько операций присваивания вида <знак операции>=, причем выражение <идентификатор><знак операции>=<выражение> эквивалентно <идентификатор>=<идентификатор><знак операции><выражение>. Например, значение выражения n+=2 равно n+2, попутно значение n увеличивается на 2.

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