Преобразования типов
Преобразование типа выполняется в случае, когда некоторое значение одного типа (значение переменной или результат выражения) присваивается переменной другого типа.
Преобразования типов могут выполняться неявно (по умолчанию) или существует операция явного преобразования типа.
Следует отметить, что язык Си – это язык со слабой типизацией, допустимы неявные преобразования любого стандартного типа в другой любой стандартный тип.
Неявные преобразования типов
Примеры:
double x=10.5;
char Ch=x; // Допустимо
int i=x, j=Ch;
long L=1050;
unsigned char C1=L;
Сформулируем следующие правила неявного преобразования стандартных типов.
1. Преобразование более длинного целого типа в менее длинный целый: отсекаются старшие биты.
2. Преобразование менее длинного целого типа в более длинный целый: если преобразуется беззнаковый тип, то старшие биты заполняются 0, если знаковый, то битом знака.
3. При преобразовании целых типов одинаковой длины, содержимое не меняется, может меняться интерпретация знакового бита
4. Преобразование менее длинного вещественного в более длинное: мантисса дополняется нулями справа.
5. Преобразование более длинного вещественного в менее длинное: усечение младших битов мантиссы, если значение слишком велико – результат не определен.
6. Преобразование вещественного к целому: дробная часть отбрасывается, и результат преобразуется в long, далее работают правила для целых, если значение слишком велико – результат не определен.
7. Преобразование целых к вещественным: преобразование к long, далее к вещественному, возможна потеря точности.
Явное преобразование типов
Существует операция явного преобразования типа, ее формат:
(<тип>) <операнд> или
<тип>(<операнд>)
Вторая форма может использоваться только, если имя типа задается одним словом, например, вторая форма не подходит для типа unsigned short и других подобных.
Примеры:
char c=(char) a;
float x=float( c );
Дата добавления: 2015-08-14; просмотров: 564;