- •14.1Тип запись в Turbo Pascal
- •14.2 Тип указатель
- •14.4Файлы
- •14.4.1 Типизированные файлы
- •14.4.2Файлы последовательного доступа
- •14.4.3 Файлы произвольного доступа.
- •14.4.4 Нетипизированные файлы.
- •15. 1. Структура программы и простые типы данных
- •15.2. Основные операции
- •15.3. Математические функции
- •15.3.7. Функции ввода и вывода
- •17.1.Переключатель.
- •18.1 Циклы в си
15.2. Основные операции
Операции выполняются в порядке увеличения их приоритета. Основные операции перечислены в табл. 15.2.
|
Приоритет |
Операция |
Название |
Порядок выполнения |
1 |
() |
Скобки, вызов функции |
Слева направо |
|
[] |
Индекс элемента массива |
Слева направо |
||
. |
Выделение элемента структуры или Объединения |
Слева направо |
||
-> |
Выделение элемента структуры (объединения), адресуемой (го) указателем |
Слева направо |
||
2 |
! |
Логическое отрицание |
Справа налево |
|
- |
Изменение знака |
Справа налево |
||
++ |
Увеличение на единицу |
Справа налево |
||
-- |
Уменьшение на единицу |
Справа налево |
||
& |
Адрес значения переменной |
Справа налево |
||
* |
Значение по указанному адресу |
Справа налево |
||
3 |
* |
Умножение |
Слева направо |
|
/ |
Деление |
Слева направо |
||
% |
Остаток от деления |
Слева направо |
||
4 |
+ |
Сложение |
Слева направо |
|
- |
Вычитание |
Слева направо |
||
5 |
< |
Меньше |
Слева направо |
|
<= |
Меньше или равно |
Слева направо |
||
> |
Больше |
Слева направо |
||
>= |
Больше или равно |
Слева направо |
||
6 |
== |
Равно |
Слева направо |
|
!= |
Не равно |
Слева направо |
||
7 |
&& |
Логическое И |
Слева направо |
|
8 |
|| |
Логическое ИЛИ |
Слева направо |
|
9 |
?: |
Условная операция |
Слева направо |
|
14 |
= |
Присваивание |
Справа налево |
|
*= |
Умножение и присваивание |
Справа налево |
||
/= |
Деление и присваивание |
Справа налево |
||
%= |
Остаток и присваивание |
Справа налево |
||
+= |
Сложение и присваивание |
Справа налево |
||
-= |
Вычитание и присваивание |
Справа налево |
Следует подчеркнуть особенность операции деления. Эта операция дает целый результат, если оба операнда целые. Например, выражение 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.