Лекции по проге / 02_Операции и выражения (1)
.pdf
Задание
Определите результат выражения
int x = 2;
x = (x == x == x);
11
Результат арифметического выражения
x = (x == x == x); |
|
|
0 |
|
|
x:0 |
||||||
возвращаемое |
||||||||||||
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
||||||
2 |
2 |
|
2 |
2 |
|
побочный |
||||||
|
|
значение операции |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
эффект |
|
|
|
1 |
|
|
|
|
|
|
|
операции |
||
|
|
|
|
|
операция |
|||||||
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
операнд |
|
|||
|
|
|
|
|
|
|
||||||
0
0 
















x:0
12
Свойства операций
Арность операции - это количество ее операндов: унарная, бинарная, тернарная (трехместная)
Например:
! – унарная операция - !a;
+ - бинарная операция - a + b;
? : - трехместная операция - a>b ? a+b : b;
13
Свойства операций
Типы операндов — операция выполняется над операндами только заданного типа. Например, операция целочисленного деления % применима только к целым числам
Возможно существование нескольких версий одной операции, каждая из которых применима к определенному типу данных. Например, операция умножения + применима ко всем скалярным типам данных, т.е. int + int, float + float, double + double и
14 т.д.
Свойства операций
Приоритет операции — определяет порядок выполнения операций: высокий, средний, низкий. Например, операция деления / имеет более высокий приоритет, чем операция присваивания =
Ассоциативность операции — определяет порядок вычисления операций с одинаковым приоритетом: слева-направо, справа-налево
15
Приоритет и ассоциативность операций
|
|
|
|
|
Операция |
|
|
Ассоциативность |
||
|
[] |
() . |
|
-> |
а++ |
а-- |
|
|
|
слева направо |
|
++а |
--a |
~ |
! |
унарная * |
& |
+ |
- sizeof |
справа налево |
|
|
(<тип>) |
|
|
|
|
|
|
|
справа налево |
|
|
бинарная * |
/ |
% |
|
|
|
|
слева направо |
||
|
+ |
- |
|
|
|
|
|
|
|
слева направо |
|
<< |
>> |
|
|
|
|
|
|
|
слева направо |
|
< |
> |
<= |
|
>= |
|
|
|
|
слева направо |
|
== |
!= |
|
|
|
|
|
|
|
слева направо |
|
& |
|
|
|
|
|
|
|
|
слева направо |
|
^ |
|
|
|
|
|
|
|
|
слева направо |
|
| |
|
|
|
|
|
|
|
|
слева направо |
|
&& |
|
|
|
|
|
|
|
|
слева направо |
|
|| |
|
|
|
|
|
|
|
|
слева направо |
|
? : |
|
|
|
|
|
|
|
|
справа налево |
|
= |
+= |
- |
+ |
*= |
/= |
%= |
&= |
^= |
|
16 |
|= |
<<= |
|
>>= |
|
|
|
|
|
справа налево |
, |
|
|
|
|
|
|
|
|
слева направо |
|
Арифметические операции
*var1 * var2 умножает одно число на другое: 6*3 будет 18
/var1 / var2 делит одно число на другое: 6/3 результат 2
+var1 + var2 суммирует два числа: 6+3 результат 9
– |
var1 – var2 |
отнимает от одного числа другое: 6–3 результат 3; |
|
-var |
может использоваться как унарный минус: -a; -5 |
||
|
|||
% var1 % var2 |
возвращает остаток от деления двух чисел: 5% 3 |
||
результат 2; 6% 3 результат 0; 3% 6 результат 3 |
|||
|
|
||
|
var++ |
увеличивает число на 1: var= 5, var++ результат 5, |
|
++ |
побочный эф ф ект var= 6; ++ var результат 6, |
||
++var |
|||
|
побочный эф ф ект var= 6 |
||
|
|
||
––var–– уменьшает число на 1: var= 5, var–– результат 5, ––var побочный эф ф ект var= 4
17
Особенности арифметических операций в языке Си
Результат операции имеет тот же тип, что и ее операнды, поэтому
5/2 => 2, но 5f/2.0 => 2.5
Операции ++ и -- имеют побочный эффект Операция % применима только к целым числам
18
Задание
Определите значение переменной x
int a = 0; int b = 5; int x;
x = (a++) - 4; x += а % b;
19
Вычисление арифметического выражения
x = (a++) - |
4; |
|
? |
0 |
4 |
a:1 |
0 |
|
|
-4 |
|
-4 
















x:-4
20
-4 a:1
возвращаемое значение операции побочный
эффект
операции
операция
операнд
x += а % b; |
||
|
|
|
|
|
|
-4 |
1 |
5 |
|
|
|
|
1 |
|
|
|
|
-3 
















x:-3
