Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1С.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
27.78 Кб
Скачать

1.7.Выражения.

Во всех языках программирования под выражением подразумевается конструкция, составленная из констант, переменных, знаков операций, функций, скобок.

Арифметическое выражение определяет порядок вычисления некоторого значения.

Например:

31.2 + a * b;

14 * ( x * y - 2);

x++; Х+У; х++; а*5-(с*с.7); --А;

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

1.8. Операции.

Для формирования и последующего вычисления выражений используются операции. В языке насчитывается 15 операций. В таблице 1 перечислены все операции в соответствии с их рангом.

Таблица1

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

Ранг

Операции

Ассоциативность

1.

( ) [ ]

→ →

2.

! ~ + − ++ −− & *(тип) sizeof

3.

* / % мультипликативные бинарные

4.

+ − аддитивные бинарные

5.

<< >> поразрядного сдвига

6.

< <= > >= отношения

7.

== != отношения

8.

& поразрядное и

9.

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

10.

| поразрядная дизъюнкция

11.

&& конъюнкция

12.

| | дизъюнкция

13.

?: условная операция

14

= *= /= %= += −= &= ^= |= <<= >>=

15.

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

Напомним, что операция, применяемая к одному операнду, называется унарной, а операция с двумя операндами – бинарной.

Арифметические операции. К арифметическим операциям относятся:

- - вычитание или унарный минус;

+ - сложение или унарный плюс;

* - умножение;

/ - деление;

% - остаток от деления целых чисел (деление по модулю);

++ - унарная операция увеличения значения переменной на 1 (инкремент);

-- - унарная операция уменьшения значения переменной на 1 ( декремент);

Все операции, кроме деления по модулю, применимы к любым числовым данным. Операция % применима только к целым числам. Рассмотрим особенности выполнения операции деления в языке Си/Си++.

В том случае, когда делимое и делитель – целые числа, результат операции деления – целочисленное частное. Например:

15/5 - результат деления равен 3;

17/5 - в результате также получается целочисленное частное 3;

15%5 - остаток от деления равен 0;

5%15 - остаток от деления равен 5;

17%5 - остаток от деления равен 2;

Если хотя бы один из операндов имеет вещественный тип, то и результат операции вещественный. Например:

15/5.0 результат деления равен 3.0.

Операции инкремента и декремента.

Операции инкремента и декремента могут применяться только к переменным. Эти операции нельзя применять к константам и выражениям. Операция ++ увеличивает значение переменной на 1, операция -- уменьшает значение переменной на 1. Каждый из знаков операций может записываться как перед операндом (префиксная форма), так и после операнда (постфиксная форма).

Рассмотрим на примерах различие использования префиксной и постфиксной формы. Пример 1:

х = 4; у = 2;

z = x++ * y++;

В результате переменные получат следующие значения: х = 5, у = 3, z = 8, т.е. если используется постфиксная форма, то значения выражения вычисляется при «старых» значениях х и у, а затем изменяются значения х и у на 1.

Пример 2:

х = 4; у = 2;

z = ++х * ++у;

В результате переменные получат следующие значения: х = 5, у = 3, z = 15. При использовании префиксной формы значения переменных х и у изменяются до выполнения операции умножения. Приоритет арифметических операций и ассоциативность приведены в таблице 1. Тем не менее, запишем еще раз арифметические операции в порядке убывания старшинства:

++, --

*, /, %

+, -

Одинаковые по старшинству операции выполняются слева направо. Для изменения порядка выполнения операций могут использоваться круглые скобки.

Операции отношения:

Операция

лексема

Меньше

<

Больше

>

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

<=

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

>=

Равно

==

Не равно

!=

В стандарте Си отсутствует логический тип данных. Поэтому результатом операции отношения является целое число: если результат операции отношения истина, то это число равно 1, в противном случае – 0.

Логические операции.

В языке Си/Си++ используется три логических операции:

! - операция отрицания (НЕ);

&& - операция умножения (конъюнкция, И);

|| - операция сложения (нестрогая дизъюнкция, ИЛИ).

Правила их выполнения определяются таблицами истинности.

НЕ

Операнд

НЕ

0

1

1

0

И

Операнд1

Операнд2

И

0

0

0

0

1

0

1

0

0

1

1

1

ИЛИ

Операнд1

Операнд2

ИЛИ

0

0

0

0

1

1

1

0

1

1

1

1

Например:

запишем логическое выражение: -3<х<3

в языке Си/Си++: х>-3 && х<3

Следует обратить внимание на то обстоятельство, что для записи выражения не понадобились круглые скобки. Объясняется это тем, что в языке Си/Си++ приоритет операции отношения выше, чем у логических операций умножения и сложения (см.таблицу1). По убыванию приоритета логические операции и операции отношения расположены в следующем порядке:

! (отрицание)

> < >= >= (операции отношения)

= = != (равно, не равно)

&& (конъюнкция)

|| (дизъюнкция)

Поразрядные логические операции.

Поразрядные логические операции определены только для целочисленных операндов и выполняются над соответствующими двоичными разрядами внутреннего представления операндов.

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

& - поразрядная конъюнкция;

| - поразрядная нестрогая дизъюнкция (ИЛИ);

^ - поразрядное исключающее ИЛИ (сложение по модулю 2);

~ - поразрядное отрицание.

Операции сдвига.

Операции сдвига определены только для целочисленных операндов.

Формат выражения операций сдвига:

Операнд1 операция Операнд2;

<< - сдвиг влево битового представления значения левого целочисленного операнда (Операнд1) на количество разрядов, равное значению правого целочисленного операнда (Операнд2).

>> - сдвиг вправо битового представления значения левого целочисленного операнда (Операнд1) на количество разрядов, равное значению правого целочисленного операнда (Операнд2).

Операция присваивания.

В качестве левого операнда в операции присваивания может использоваться только идентификатор переменной. Знак операции присваивания =. Присваивание, как любой другой знак операции может входить в выражение несколько раз. Например:

х = у = z + 3;

Операция присваивания правоассоциативна и имеет очень низкий приоритет (ранг равен 14). Различают простую операцию присваивания и составные операции, как уже отмечалось, знак простой операции присваивания =.

Рассмотрим составные операции присваивания на примерах, все эти операции перечислены в таблице 1.

a += 2 эквивалентно a = a +2;

c -= a эквивалентно c = c – a;

p / = n эквивалентно p = p/n;

n *= i эквивалентно n = n * i;

r %= 7 эквивалентно r = r % 7;

a <<= 4 эквивалентно a = a << 4;

a >>= 4 эквивалентно a = a >> 4;

a &= 14 эквивалентно a = a & 14;

a |= b эквивалентно a = a | b;

a ^= c эквивалентно a = a ^ c.

Операция sizeof.

Операция sizeof имеет две формы записи: sizeof (тип) и sizeof (выражение). Результатом операции является число, равное количеству байтов, которое занимает в памяти величина явно указанного типа или величина, полученная в результате вычисления выражения. Если посмотреть таблицу операций, то можно определить, что приоритет операции sizeof выше, чем приоритет бинарных арифметических операций, логических операций и отношений. Примеры:

sizeof (char) - результат 1 байт;

sizeof (14L) - результат 4 байта;

sizeof (14.2) - результат 8 байт.

Операция <запятая>.

Операция <запятая> используется для связывания нескольких выражений в одно. Несколько выражений, разделенных запятыми, вычисляются слева направо, в качестве результата сохраняются тип и значение самого правого выражения. Операция <запятая> группирует вычисления слева направо.

В дальнейшем рассмотрим использование этой операции. Также в дальнейшем будут рассмотрены остальные операции, перечисленные в таблице 1.