
Тема № 2. Выражения и операции языка
Унарные операции
&
&c_Symb – адрес в памяти значения переменной c_Symb
*
–
+
~ побитовое отрицание 0001 1100 1110 0011
! логическое отрицание 0 1, не 0 0.
++
…
int result, arg=2;
result = ++arg;
result примет значение 3.
…
int result, arg=2;
result = arg++;
––
sizeof операция вычисления размера операнда (в байтах)
sizeof(char) = 1
sizeof(long) = 4
short Count;
sizeof(Count) = 2
Бинарные операции
+ |
бинарный плюс - сложение арифметических операндов или сложение указателя с целым |
– |
бинарный минус - вычитание арифметических операндов или вычитание указателей |
* |
умножение операндов арифметического типа |
/ |
деление операндов арифметического типа. При целочисленных операндах абсолютное значение результата округляется до целого. 20/3 = 6 и (-20)/3 = -6 |
% |
получение остатка от деления целочисленных операндов (деление по модулю). Знак остатка равен знаку делимого. 14%3 = 2 и (–14)%3 = –2 |
float res;
res = 5/4;
Результат: res = 1
float res;
res = 5./4.;
Результат: res = 1.25
<<
short res, Value = 12;
res = Value << 5;
12 = 0000 0000 0000 1100 – Результат: 0000 0001 1000 0000 = 0x180 =256+128 = 384
12 * 25 = 12 * 32 = 384
>>
short res, Value = 1120;
res = Value >> 5;
1120 = 1024 + 96 = 1024 + 64 + 32 = 210 + 26 + 25 = 0000 0100 0110 0000
– Результат: 0000 0000 0010 0011 = 0x23=32+3 = 35
1120 / 25 = 1120 / 32 = 35
& |
поразрядная конъюнкция (И) |
0&0 = 0 |
1&0 = 0 |
0&1 = 0 |
1&1 = 1 |
| |
поразрядная дизъюнкция (ИЛИ) |
0|0 = 0 |
1|0 = 1 |
0|1 = 1 |
1|1 = 1 |
^ |
поразрядное исключающее ИЛИ |
0^0 = 0 |
1^0 = 1 |
0^1 = 1 |
1^1 = 0 |
< |
меньше, чем |
> |
больше, чем |
<= |
меньше или равно, чем |
>= |
больше или равно, чем |
== |
равно |
!= |
не равно |
&& |
конъюнкция (И) |
|| |
дизъюнкция (ИЛИ) |
4 < 9 1
3 == 5 0
3 != 5 || 3==5 1
(3+4>5) && (3+5>4) && (4+5>3) 1
А = B*2; - присвоить А результат вычисления выражения B*2
X = XY; - то же в записи составного присваивания: X =Y
+ – * / % << >> & | ^
f += 5; d –= f*2; con ^= 0xff71;
Операции выбора компонентов структурированного объекта
. ->
Запятая в качестве операции
int x,y;
y = (x=3, 3*x); (после операции х=3, y=9).
Скобки в качестве операций
<имя функции> (<список аргументов>)
<имя массива> [<индекс>]
Условная трехместная операция
<выражение_1> ? <выражение_2> : <выражение_3>
x_abs = x < 0 ? –x : x;
Операция явного преобразования типа
(<имя типа>) <операнд>
int i_x;
double f_y= 1.25;
i_x = (int)f_y;
1. Все короткие целые типы преобразуются в типы не меньшей длины в соответствии со следующей таблицей:
Исходный тип |
Преобразованный тип |
Правила преобразований |
char |
int |
Расширение нулем или знаком |
unsigned char |
int |
Старший байт заполняется нулем |
signed char |
int |
Расширение знаком |
short |
int |
Сохраняется то же значение |
unsigned short |
unsigned int |
Сохраняется то же значение |
enum |
int |
Сохраняется то же значение |
битовое поле |
int |
Сохраняется то же значение |
2. Если один из операндов имеет тип long double, то второй тоже будет преобразован в long double.
3. Если п.2 не выполняется и один из операндов есть double, то второй тоже будет преобразован в double.
4. Если пп.2 и 3 не выполняются и один из операндов есть float, то второй тоже будет преобразован к типу float.
5. Если пп.2 – 4 не выполняются (оба операнда целые) и один из операндов есть unsigned long int, то второй тоже будет преобразован к типу unsigned long int.
6. Если пп.2 – 5 не выполняются и один из операндов есть long, то второй тоже будет преобразован к типу long.
7. Если пп.2 – 6 не выполняются и один из операндов есть unsigned, то второй тоже будет преобразован к типу unsigned.
8. Если пп.2 – 7 не выполняются, то оба операнда имеют тип int.