
2_Operacii_i_vyrazhenija
.pdf
Лекция №2. Операции и выражения в языке Си
Выражения Операнды Операции
Приведение типов в выражениях
1

Выражения
Вычисления в программе выполняются с помощью выражений Простейший способ организации вычислений в
программе — использование оператора выражения:
<выражение>;
Пример: |
a = b + 3; |
Выражения строятся из операндов, объединенных знаками операций Тип выражения фиксирован, а значение определяет-
2 ся во время выполнения программы

Операнды
Данные, над которыми выполняется операция, называются операндами
Операндами могут быть: Константы: 0.5 < 'f' Переменные: tmp = a
Выражения : cos(a) > pi или y = 2 * (x + 5)
3

Операции
|
Арифметические операции |
+ |
- |
* / |
|
% |
++x |
x++ |
|
|
--x |
x-- |
|
|
|
||
|
Операции отношения |
== |
!= |
< |
<= |
> |
>= |
|
|
Логические операции |
! |
&& |
|| |
|
|
|
|
|
Побитовые операции |
~ |
& |
| |
^ |
<< |
>> |
|
|
Операция присваивания |
= |
*= |
/= |
|
%= |
+= |
-= |
|
|
<<= |
|
>>= |
|
&= |
^= |
|= |
|
Условная операция |
? : |
|
|
|
|
|
|
|
Адресные операции |
& |
* |
|
|
|
|
|
|
Операции над массивами |
[] |
|
|
|
|
|
|
|
Операции над структурами |
. |
-> |
|
|
|
|
|
|
Операция преобразования типа |
(<тип>)x |
|
|
|
|
||
|
Операция определения размера |
sizeof(x) |
|
|
|
|
||
4 |
выделяемой памяти |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Свойства операций
Арность операции - это количество ее операндов: унарная, бинарная, тернарная (трехместная). Например, ! – унарная операции, + - бинарная операции, ? : - трехместная операция
Приоритет операции — определяет порядок выполнения операций: высокий, средний, низкий. Например, операция деления / имеет более высокий приоритет, чем операция присваивания =
5

Свойства операций
Типы операндов — операция выполняется над операндами только заданного типа. Например, операция целочисленного деления % применима только к целым числам
Возможно сущестование нескольких версий одной операции, каждая из которых применима к определенному типу данных. Например, операция умноже-
ния + применима ко всем скалярным типам данных, т.е. int + int, float + float, double + double и
6 т.д.

Свойства операций
Тип возвращаемого значения — операция всегда возвращает значение определенного типа. Например, операция % вовзращает целочисленное значение, а
операция + возвращает значение в зависимости от используемой версии: int + int => int, float + float => float и т.д.
Ассоциативность операции — определяет порядок вычисления операций с одинаковым приоритетом: слева-направо, справа-налево
7

Приоритет и ассоциативность операций
|
|
|
|
|
Операция |
|
|
|
Ассоциативность |
|
|
[] |
() . |
|
-> |
а++ |
а-- |
|
|
|
слева направо |
|
++а |
--a |
~ |
! |
унарная * |
& |
+ |
- |
|
|
|
sizeof |
|
|
|
|
|
|
|
справа налево |
|
|
(<тип>) |
|
|
|
|
|
|
|
справа налево |
|
|
бинарная * |
/ |
% |
|
|
|
|
слева направо |
||
|
+ |
- |
|
|
|
|
|
|
|
слева направо |
|
<< |
>> |
|
|
|
|
|
|
|
слева направо |
|
< |
> |
<= |
|
>= |
|
|
|
|
слева направо |
|
== |
!= |
|
|
|
|
|
|
|
слева направо |
|
& |
|
|
|
|
|
|
|
|
слева направо |
|
^ |
|
|
|
|
|
|
|
|
слева направо |
|
| |
|
|
|
|
|
|
|
|
слева направо |
|
&& |
|
|
|
|
|
|
|
|
слева направо |
|
|| |
|
|
|
|
|
|
|
|
слева направо |
|
? : |
|
|
|
|
|
|
|
|
справа налево |
|
= |
+= |
- |
+ |
*= |
/= |
%= |
&= ^= |
|
|
8 |
|= |
<<= |
|
>>= |
|
|
|
|
|
справа налево |
, |
|
|
|
|
|
|
|
|
слева направо |

Свойства операций
|
Побочный эффект операции — это изменение зна- |
|
чения одного из операндов. Операнд должен быть L- |
|
value-выражением |
|
L-value (left value)-выражение — это выражение, |
|
ссылающееся на участок в памяти. Такое название |
|
дано, потому что только L-value-выражения могут |
|
встречаться в левых частях оператора присваивания |
|
К L-value-выражениям, например, относятся: |
|
− переменная: a |
9 |
− обращение к элементу массива: mass[2] |

Операции с побочным эффектом
Арифметические операции |
++x |
x++ |
--x |
x-- |
|
Операция присваивания |
= *= |
/= |
%= |
+= |
-= |
|
<<= |
>>= |
&= |
^= |
|= |
10