Примечание. В СП MSC и СП ТС тип int
эквивалентен типу short и преобразование для типа int производится как для типа short. В некоторых реализациях языка Си тип int эквивалентен типу long и преобразование для типа int
производится как для типа long.
Преобразование беззнаковых целых типов
Беззнаковое целое значение преобразуется к короткому беззнаковому целому значению или короткому знаковому целому значению путем усечения старших битов. Беззнаковое целое значение преобразуется к длинному беззнаковому целому значению или длинному знаковому целому значению путем дополнения нулями слева. Беззнаковое целое значение преобразуется к значению с плавающей точкой путем преобразования к типу long, а затем преобразования значения типа long к значению с плавающей точкой.
Если беззнаковое целое значение преобразуется к знаковому целому значению того же размера, то битовое представление не меняется. Однако, если старший (знаковый) бит был установлен в единицу, представляемое значение изменится.
Правила преобразования беззнаковых целых типов приведены в таблице 4.3.
Таблица 4.3.
Преобразование беззнаковых целых типов
От типа |
К типу |
Метод |
unsigned char |
char |
сохранение битового представления; старший бит становится знаковым |
unsigned char |
short |
дополнение нулевыми битами |
unsigned char |
long |
дополнение нулевыми битами |
unsigned char |
unsigned short |
дополнение нулевыми битами |
unsigned char |
unsigned long |
дополнение нулевыми битами |
unsigned char |
float |
дополнение нулевыми битами до long; преобразование long к float |
unsigned char |
double |
дополнение нулевыми битами до long; преобразование long к double |
unsigned short |
char |
сохранение младшего байта |
unsigned short |
short |
сохранение битового представления; старший бит становится знаковым |
unsigned short |
long |
дополнение нулевыми битами |
unsigned short |
unsigned char |
сохранение младшего байта |
unsigned short |
unsigned long |
дополнение нулевыми битами |
unsigned short |
float |
дополнение нулевыми битами до long; преобразование long к float |
unsigned short |
double |
дополнение нулевыми битами до long; преобразование long к double |
unsigned long |
char |
сохранение младшего байта |
unsigned long |
short |
сохранение младшего слова |
unsigned long |
long |
сохранение битового представления; старший бит становится знаковым |
unsigned long |
unsigned char |
сохранение младшего байта |
unsigned long |
unsigned short |
сохранение младшего слова |
unsigned long |
float |
преобразование к long; преобразование long к float |
unsigned long |
double |
преобразование к long; преобразование long к double (в версии 5 СП MSC это преобразование производится напрямую, без промежуточного типа long) |