Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624 Кб
Скачать
☆

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.