Язык программирования Си для персонального компьютера | страница 87



со знакового на беззнаковый, то для него выполняется преобразование как для типа unsigned char (см. таблицу 4.3).

Таблица 4.2.

Преобразование знаковых целых типов
От типаК типуМетод
charshortдополнение знаком
charlongдополнение знаком
charunsigned charсохранение битового представления;
charunsigned shortстарший бит теряет функцию знакового бита дополнение знаком до short; преобразование short в unsigned short
charunsigned longдополнение знаком до long; преобразование long в unsigned long
charfloatдополнение знаком до long; преобразование long к float
chardoubleдополнение знаком до long; преобразование long к double
shortcharсохранение младшего байта
shortlongдополнение знаком
shortunsigned charсохранение младшего байта
shortunsigned shortсохранение битового представления; старший бит теряет функцию знакового бита
shortunsigned longдополнение знаком до long; преобразование long в unsigned long
shortfloatдополнение знаком до long; преобразование long к float
shortdoubleдополнение знаком до long; преобразование long к double
longcharсохранение младшего байта
longshortсохранение младшего слова
longunsigned charсохранение младшего байта
longunsigned shortсохранение младшего слова
longunsigned longсохранение битового представления; старший бит теряет функцию знакового бита
longfloatпредставляется как float; возможна некоторая потеря точности
longdoubleпредставляется как double; возможна некоторая потеря точности

Примечание. В СП MSC и СП ТС тип int эквивалентен типу short и преобразование для типа int производится как для типа short. В некоторых реализациях языка Си тип int эквивалентен типу long и преобразование для типа int производится как для типа long.

Преобразование беззнаковых целых типов

Беззнаковое целое значение преобразуется к короткому беззнаковому целому значению или короткому знаковому целому значению путем усечения старших битов. Беззнаковое целое значение преобразуется к длинному беззнаковому целому значению или длинному знаковому целому значению путем дополнения нулями слева. Беззнаковое целое значение преобразуется к значению с плавающей точкой путем преобразования к типу long, а затем преобразования значения типа long к значению с плавающей точкой.

Если беззнаковое целое значение преобразуется к знаковому целому значению того же размера, то битовое представление не меняется. Однако, если старший (знаковый) бит был установлен в единицу, представляемое значение изменится.

Правила преобразования беззнаковых целых типов приведены в таблице 4.3.