-увеличение или уменьшение разрядности машинного слова, то есть " усечение" или " растягивание" целой переменной;
-преобразование целой переменной в переменную с плавающей точкой и наоборот;
-преобразование знаковой формы представления целого в беззнаковую и наоборот.
Уменьшение разрядности машинного слова всегда происходит путем отсечения старших разрядов числа. Заметим, что это может привести к ошибкам потери значащих цифр и разрядов:
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; // Потеря значимости
Преобразование знаковой формы к беззнаковой не сопровождается изменением значения целого числа и вообще не приводит к выполнению каких-либо действий в программе.