
- •Язык программирования C
- •Модуль 3. Операции
- •Выражения. Операнды. Операции.
- •Операция присваивания.
- •Арифметические операции
- •Комбинированные операции
- •Операции отношения
- •Логические операции
- •Битовые операции
- •Операции доступа и адресные операции
- •Прочие операции
- •Приоритеты и ассоциативность операций

Модуль 3. Операции
Битовые операции
Операнды должны иметь целый тип и рассматриваются как цепочки битов.
~ |
|
побитовое отрицание |
~a |
|
|
|
|
|
|
|
|
a |
b |
|
^ |
||||
& |
|
побитовая конъюнкция |
a & b |
|
|
||||
| |
|
побитовая дизъюнкция |
a | b |
|
|
|
|
|
|
|
|
0 |
0 |
|
0 |
||||
^ |
|
побитовое XOR |
a ^ b |
|
|
||||
|
|
|
|
|
|
||||
|
|
0 |
1 |
|
1 |
||||
<< |
сдвиг влево |
a << k, |
(k>=0) |
|
|||||
|
|
|
|
||||||
1 |
0 |
|
1 |
||||||
>> |
сдвиг вправо |
a >> k, |
(k>=0) |
|
|||||
Комбинации с присваиванием |
a &= b и т.п. |
1 |
1 |
|
0 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
Приоритет |
Лексемы |
Тип операции |
|
Ассоциативность |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
… |
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
~ |
Унарные |
|
Справа налево |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
… |
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
<< >> |
Битовый сдвиг |
|
Слева направо |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
… |
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
& |
Побитовое «И» |
|
Слева направо |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
^ |
Побитовое исключающее «ИЛИ» |
Слева направо |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
| |
Побитовое «ИЛИ» |
|
Слева направо |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
… |
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
<<= >>= &= ^= |= |
Простое и комбинированное |
Справа налево |
|
|||
|
|
|
|
присваивание |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
… |
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9

Модуль 3. Операции
Операции доступа и адресные операции
Операции доступа
– |
array [ index ] |
– доступ к элементу массива |
|
– |
function ( |
arg_list ) |
– доступ к значению функции |
– |
struct_var |
. field_name |
- доступ к полю структуры |
Адресные операции
–& var – вычисление адреса объекта
– * pointer – разадресация указателя (доступ по указателю, доступ по адресу)
–pointer_to_struct_var->field_name – доступ к полю структуры по адресу
|
|
|
|
|
|
|
Приоритет |
|
Лексемы |
Тип операции |
Ассоциативность |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
[ ] ( ) . –> |
Доступ |
Слева направо |
|
|
|
|
|
|
|
|
|
|
||
|
2 |
|
& * |
Унарные |
Справа налево |
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
|
… |
… |
… |
|
|
|
|
|
|
|
|
|
|
|
|
10

Модуль 3. Операции
Прочие операции
Размер объекта
– |
sizeof(type) |
- размер типа в байтах |
– |
sizeof expression |
- размер типа результата выражения в байтах |
Последовательное вычисление
– expression1 , expression2 - операция “запятая”
|
|
|
|
Приоритет |
Лексемы |
Тип операции |
Ассоциативность |
|
|
|
|
|
|
|
|
… |
… |
… |
… |
|
|
|
|
|
|
|
|
2 |
sizeof |
Унарные |
Справа налево |
|
|
|
|
|
|
|
|
… |
… |
… |
… |
|
|
|
|
|
|
|
|
16 |
, |
Последовательное вычисление |
Слева направо |
|
|
|
|
|
|
|
|
11

Модуль 3. Операции
Приоритеты и ассоциативность операций
Приоритет
Лексемы
1[ ] ( ) . –>
постфиксные ++ и ––
2префиксные ++ и ––
|
sizeof & * + – ~ |
! |
|
|
(тип) |
|
|
|
|
||
3 |
|
||
|
|
|
|
|
|
|
|
4 |
* / % |
|
|
|
|
– |
|
|
+ |
|
|
5 |
|
||
|
|
|
|
|
|
|
|
|
<< >> |
|
|
6 |
|
||
|
|
|
|
|
|
|
|
7 |
< > <= >= |
|
|
|
|
!= |
|
|
|
|
|
|
== |
|
|
8 |
|
||
|
|
|
|
|
|
|
|
9 |
& |
|
|
|
|
|
|
|
|
|
|
10 |
^ |
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
12 |
&& |
|
|
|
|
|
|
|
|
|
|
13 |
|| |
|
|
|
|
: |
|
|
|
|
|
|
? |
|
|
14 |
|
||
|
|
–= |
|
|
|
||
15 |
= *= /= %= += |
||
|
<<= >>= &= ^= |= |
||
|
|
|
|
|
|
|
|
16 |
, |
|
|
|
|
|
|
|
|
|
|
Тип операции |
Ассоциативность |
|
|
|
|
Доступ |
Слева направо |
|
|
|
|
Унарные |
Справа налево |
|
|
|
|
Приведение типа |
Справа налево |
|
|
|
|
Мультипликативные |
Слева направо |
|
|
|
|
Аддитивные |
Слева направо |
|
|
|
|
Битовый сдвиг |
Слева направо |
|
|
|
|
Отношения |
Слева направо |
|
|
|
|
Равенство |
Слева направо |
|
|
|
|
Побитовое «И» |
Слева направо |
|
|
|
|
Побитовое исключающее «ИЛИ» |
Слева направо |
|
|
|
|
Побитовое «ИЛИ» |
Слева направо |
|
|
|
|
Логическое «И» |
Слева направо |
|
|
|
|
Логическое «ИЛИ» |
Слева направо |
|
|
|
|
Условное выражение |
Справа налево |
|
|
|
|
Простое и комбинированное |
Справа налево |
присваивание |
|
|
|
|
|
Последовательное вычисление |
Слева направо |
|
|
12