Информатика и технология программирования


Преобразование типов операндов


В выражениях в качестве операндов могут присутствовать переменные и константы разных типов (здесь и далее мы ограничимся пока только известными нам базовыми типами данных). Результат каждой операции также имеет свой определенный тип, который зависит от типов операндов. Если в бинарных операциях типы данных обоих операндов совпадают, то результат будет иметь тот же самый тип. Если нет, то транслятор должен включить в код программы неявные операции, которые преобразуют тип операндов, то есть выполнить ПРИВЕДЕНИЕ ТИПОВ. Преобразование типов может включать в себя следующие действия:



-увеличение или уменьшение разрядности машинного слова, то есть " усечение" или " растягивание" целой переменной;



-преобразование целой переменной в переменную с плавающей точкой и наоборот;



-преобразование знаковой формы представления целого в беззнаковую и наоборот.

Уменьшение разрядности машинного слова всегда происходит путем отсечения старших разрядов числа. Заметим, что это может привести к ошибкам потери значащих цифр и разрядов:


int n=0x7654;
char c; c = n; // Потеря значащих цифр (0x54)


Увеличение разрядности приводит к появлению дополнительных старших разрядов числа. При этом способ их заполнения зависит от формы представления целого:



-для беззнаковых целых заполнение производится нулями;



-для целых со знаком они заполняются значением знакового (старшего) разряда.

Таким образом, при увеличении размерности целого его значение сохраняется:


int n; unsigned u;
char c=0x84; n = c; // Значение n=0xFF84


unsigned char uc=0x84; u = uc; // Значение u=0x0084


При преобразовании вещественного к целому происходит потеря дробной части, при этом возможны случаи возникновения ошибок переполнения и потери значащих цифр, когда полученное целое имеет слишком большое значение:


double d1=855.666, d2=0.5E16;
int n; n = d1; // Отбрасывание дробной части


n = d2; // Потеря значимости

Преобразование знаковой формы к беззнаковой не сопровождается изменением значения целого числа и вообще не приводит к выполнению каких-либо действий в программе.


Начало  Назад  Вперед



Книжный магазин