- •Данных. Составные структуры данных
- •3.2.1 Общие положения
- •3.2.1.1 Алфавит языка
- •3.2.1.2 Формат программы
- •3.2.1.3. Комментарии
- •// Пример однострочного комментария
- •3.2.2.2 Типы данных
- •3.2.1.4 Зарезервированные слова
- •3.2.2 Данные
- •3.2.2.1 Идентификаторы данных
- •3.2.2.3 Постоянные
- •3.2.2.4 Переменные
- •3.2.2.5 Массивы
- •3.2.2.6 Структуры
- •3.2.2.7 Объединения
- •Масив X:
- •Адреса элементу:
- •Масив y:
- •3.2.2.8 Перечисления
- •3.2.2.9 Указатели
- •Int Hour;
- •Int Press;
- •3.2.2.9.1 Динамическое выделения памяти для хранения данных
- •3.2.2.9.2 Динамическое освобождение памяти от хранимых данных
- •3.2.2.9.3 Ссылка
- •3.2.2.10 Множества
- •3.2.3 Выражения
- •3.2.3.1 Арифметические операции
- •Char int float | signed unsigned | short (базовый) long
- •3.2.3.2 Битовые операции
- •3.2.3.2 Логические операции
- •3.2.3.4 Операции отношения
- •3.2.3.5 Операция присваивания
- •3.2.3.6 Специальные операции
- •3.2.3.7 Элементарные функции
- •3.8 Приведение типов данных
- •3.2.3.9 Приоритеты операций
- •3.2.3.10 Адресные выражения
3.2.3 Выражения
Выражение – это конструкция языка, состоящая из операндов (данных), символов операций (выполняемых действий над данными) и, возможно, скобок, задающих принудительный порядок вычислений.
Выражение определяет правило вычисления значений одного или сразу нескольких данных, однако выражение в целом всегда имеет единственное типизированное значение.
Основные операции классифицируются на:
одноместные операции, применяемые к одному операнду согласно правилу:
одноместная операция ::= операция, операнд;
двухместные операции, применяемые к двум операндам согласно правилу:
двухместная операция ::= операнд, операция, операнд;
Примеры:
-X // одноместная операция «-» (сменить знак) применяется к одному операнду X
X + Y // двухместная операция «+» (сложение) применяется к двум операндам: X и Y
Операции подразделяются на: арифметические, битовые, логические, отношения, присваивания, специальные.
3.2.3.1 Арифметические операции
Арифметическими называются операции, которые определяются правилами:
одноместная арифметическая операция ::= ( + / - )(знак) | ++(инкремент) | - -(декремент);
двухместная арифметическая операция ::=
+(сложение) | -(вычитание) | *(умножение) | /(деление) | %(вычисление остатка частного);
В арифметических операциях могут участвовать операнды: символьного, целого и действительного типов. Кроме того, в арифметических операциях инкремента, декремента, сложения и вычитания могут участвовать операнды-указатели. Следует учесть, что данные символьного типа представляются их числовыми кодами, а, следовательно, правила выполнения операций для операндов символьного и целого типов совпадают.
Если в выражении участвуют данные одного типа, то значение выражения имеет тип операндов. Если же в выражении участвуют данные различных типов, то результаты выполнения каждой операции приводятся к старшему типу операндов в порядке возрастания старшинства типов по группам (рисунок 3.2.9).
группа1 группа2 группа3
Char int float | signed unsigned | short (базовый) long
Рисунок 3.2.9
Одноместные арифметические операции языка определяются следующими правилами:
одноместная арифметическая операция ::= знак | инкремент | декремент;
знак ::= +(подтверждение знака) | -(изменение знака);
инкремент ::= префиксный инкремент | постфиксный инкремент;
префиксный инкремент ::= ++, (данное символьного типа | данное целого типа);
постфиксный инкремент ::= (данное символьного типа | данное целого типа), ++;
декремент ::= префиксный декремент | постфиксный декремент;
префиксный декремент ::= - -, (данное символьного типа | данное целого типа);
постфиксный декремент ::= (данное символьного типа | данное целого типа), - -;
Операция «-» изменяет знак данного на противоположный: так, если X=5, то –X имеет значение (-5). Операция «+» знака не меняет, поэтому её имеет смысл применять только к неидентифицированным постоянным для акцентирования положительности данного, например, +5.12.
Операция инкремент увеличивает, а декремент уменьшает значение операнда на 1. При этом префиксные операции инкремент и декремент являются правоассоциативными (т.е. связываются с ближайшим операндом справа от операции) и выполняются до использования операнда в выражении, а постфиксные – левоассоциативными (т.е. связываются с ближайшим операндом слева от операции) и выполняются после использования операнда в выражении.
Примеры:
++S - 2 // при S=6 выполнение операции даёт: S=7 и значение выражения 5
S++ - 2 // при S=6 выполнение операции даёт: значение выражения 4 и S=7
При выполнении операции «%» оба операнда должны быть данными символьного или целого типа. При этом знак результата вычисления совпадает со знаком первого операнда. Например: 5%(-2) дает 1.
При выполнении операций «/» и «%» второй операнд не может быть равен нулю.
При выполнении операции «/» над операндами символьного и целого типов округление результата производится отбрасыванием дробной части результата. Например: -5 / 2 даёт -2.
