2_Operacii_i_vyrazhenija
.pdfПрочие операции
Операция определения размера занимаемой памяти
|
sizeof(var) |
возвращает размер памяти в байтах, занимаемый |
sizeof |
переменной или типом данных: |
|
sizeof(<тип>) |
sizeof(short int) результат 2; |
|
|
|
short int mass[100], sizeof(mass) результат 200 |
Операция явного приведения типа
|
|
преобразует значения выражения к указанному типу в |
|
|
ходе вычислений; операция не имеет побочных |
|
(<тип>)<выражение> |
эф ф ектов (т.е. значение переменной а в примере не |
|
(float)2 результат 2.0 |
|
|
|
изменится): |
|
|
(int)a результат целое число, полученное после |
21 |
|
отбрасывания дробной части у переменной а |
|
|
Преобразование типов в выражениях
Если тип операндов отличается от типа данных, с которыми операция может выполняться, то значения операндов должны быть преобразованы к требуемому типу данных
Пример: выражение
2.5 + 3
не может быть вычислено, т.к. складывать можно только однотипные операнды, следовательно, требуется преобразовать один из операндов
22
Преобразование типов в выражениях
Неявные преобразования – это преобразования, результат которых всегда успешен и не приводит к потере точности данных; автоматически выполняются компилятором
Явные преобразования – это разрешенные преобразования, успех которых не гарантируется или может приводить к потере точности; явно задаются про-
23 граммистом
Неявные преобразования типов в выражениях
char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
float
double
long double
Наличие пути говорит лишь о существовании преобразова- 24 ния, а само преобразование выполняется только один раз
Задание
Определите значение переменной x
int a = 0; int b = 5; int x = 2;
x = 4 - (++a) + (float)b/x;
25
Явные и неявные приведения типов
x = 4 - (++a) + (float)b / x;
2 |
4 |
0 |
5 |
2 |
|
|
1 |
5.0 |
2.0 |
|
|
a:1 |
2.5 |
|
|
|
|
||
|
|
3 |
|
|
|
|
3.0 |
|
|
|
|
5.5 |
|
|
26 |
5 |
5 x:5 |
|
|
операция
неявное
приведение
типа
операнд
-4
результат
операции
a:1
побочный
эффект
операции
Это надо помнить!
Простейший оператор языка Си состоит из выражения, заканчивающегося точкой с запятой.
Некоторые операции могут изменять свои операнды
Деление целых чисел всегда дает в результате целое число
27
Ошибки при компиляции
can not convert '<тип 1>' to '<тип 2>' - вы пытаетесь использовать операцию с неподходящими типами данных (тип 1 использовали вы, в то время как надо было использовать тип 2)
'=': left operand must be l-value — слева от операции присваивания стоит что-то, чему нельзя присваивать (не l-value-выражение)
'++' needs l-value — операция ++ (--) должна выполняться только над тем, что можно изменить (l-
28 value-выражение)