Операции инкремент и декремент
Бинарные и тернарные операции
Унарные
Операции
Выражения
Выражение состоит из операндов и знаков операции и используется для вычисления значения определенного типа.
Приоритет | Действие |
+ + увеличить на 1 - - уменьшить на 1 | |
~ поразрядное отрицание ! логическое отрицание - арифметическое отрицание | |
+ унарный плюс | |
& взятие адреса | |
* разыменование разадресация | |
(type) преобразование типа | |
sizeof размер |
Приоритет | Действие |
* умножение / деление % остаток от деления | |
+ сложение - вычитание | |
<< сдвиг влево >> сдвиг вправо | |
< меньше <= меньше или равно > больше >= больше или равно | |
= = равно ! = не равно | |
& поразрядная конъюнкция И | |
^ поразрядное исключающее ИЛИ | |
| поразрядная дизъюнкция | |
&& логическое И | |
| | логическое ИЛИ | |
?: условная операция (тернарная) | |
= присваивание * = умножение с присваиванием / = деление с присваиванием % = остаток от деления с присваиванием + = сложение с присваиванием - = вычитание с присваиванием << = сдвиг влево с присваиванием >> = сдвиг вправо с присваиванием & = поразрядное И с присваиванием | = поразрядное ИЛИ с присваиванием ^ = поразрядное искл. ИЛИ с присваиванием | |
, последовательное вычисление |
Каждый операнд может быть выражением, или в частном случае – константой или переменной.
|
|
Если операции одного приоритета, то
§ справа налево вычисляются
- унарные операции,
- условная операция,
- операция присваивания a=b=c равносильно a=(b=c).
§ слева направо вычисляются все остальные.
a+b+с равносильно (a+b)+c,
a>b>c равносильно (a>b)>c.
Для изменения порядка вычислений используют круглые скобки.
Результат вычисления выражения имеет значение и тип. Если операнды имеют одинаковый тип, тот же тип имеет результат выражения.
Если типы операндов различны, то перед вычислением выполняются преобразования типов (от более коротких к более длинным для сохранения значимости и точности).
При этом может измениться внутреннее представление (int ® float) или интерпретация внутреннего представления (char ® unsigned short int).
+ + и - - две формы записи:
префиксная <операция> <операнд>
постфиксная <операнд> <операция>
Префиксная форма:
Операнд изменяется, новое значение – результат выражения.
Постфиксная форма:
Результат выражения – исходное значение операнда, после вычисления выражения операнд изменяется.
Операнд – в общем случае это L – значение.
L – значение – это любое выражение, адресующее некоторый участок памяти, в который можно занести значение.
|
|
b=1;
a= + + b; (a=2, b=2)
c=b + +; (c=2, b=3)
b=4;
c= b - -; (c=4, b=3)
a= - - b; (a=2, b=2)
int x = 3, y;
арифметическое
y = -x; /*y=-3*/;
поразрядное
y= ~ x; /*y= 0011 -> 1100 -> -4;*/
логическое
y=!x; /* y= 0*/