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

Когда целое число со знаком преобразуется в целое число или тип с плавающей запятой, значение не изменяется, если оно представлено в результирующем типе.

При преобразовании целого числа со знаком в целое число большего размера значение расширяется со знаком. При преобразовании в целое число меньшего размера старшие разряды усекаются. Результат интерпретируется как результирующий тип (см. пример).

int i = -3;
unsigned short u;

u = i;
printf_s( "%hu\n", u );  // Prints 65533

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

Сведения о размерах целочисленных типов и типов с плавающей запятой см. в статье Хранение базовых типов.

В следующей таблице перечислены преобразования из целочисленных типов со знаком. В ней тип char является типом со знаком по умолчанию. При использовании параметра времени компиляции для изменения значения по умолчанию для типа char на тип без знака преобразования, перечисленные в таблице Преобразования из целочисленных типов без знака для типа unsigned char, применяются вместо преобразований в этой таблице.

Блок, относящийся только к системам Microsoft

В компиляторе Майкрософт int и long являются отдельными, но эквивалентными типами. Преобразование значения int выполняется так же, как и преобразование long .

Завершение блока, относящегося только к системам Майкрософт

Таблица преобразований из целочисленных типов со знаком

Исходный тип Кому Метод
char1 short Расширение знака
char long Расширение знака
char long long Расширение знака
char unsigned char Сохранение шаблона; бит высокого порядка перестает функционировать как бит знака
char unsigned short Расширение знака до short ; преобразование short в unsigned short
char unsigned long Расширение знака до long ; преобразование long в unsigned long
char unsigned long long Расширение знака до long long ; преобразование long long в unsigned long long
char float Представить точно как float
char double Представить точно как double
char long double Представить точно как long double
short char Сохранение байта низкого порядка
short long Расширение знака
short long long Расширение знака
short unsigned char Сохранение байта низкого порядка
short unsigned short Сохранение битового шаблона; бит высокого порядка перестает функционировать как бит знака
short unsigned long Расширение знака до long ; преобразование long в unsigned long
short unsigned long long Расширение знака до long long ; преобразование long long в unsigned long long
short float Представить точно как float
short double Представить точно как double
short long double Представить точно как long double
long char Сохранение байта низкого порядка
long short Сохранение слова низкого порядка
long long long Расширение знака
long unsigned char Сохранение байта низкого порядка
long unsigned short Сохранение слова низкого порядка
long unsigned long Сохранение битового шаблона; бит высокого порядка перестает функционировать как бит знака
long unsigned long long Расширение знака до long long ; преобразование long long в unsigned long long
long float Представление в виде float . Если long невозможно представить точно, некоторая точность теряется.
long double Представить точно как double
long long double Представить точно как long double
long long char Сохранение байта низкого порядка
long long short Сохранение слова низкого порядка
long long long Сохранение младшего dword
long long unsigned char Сохранение байта низкого порядка
long long unsigned short Сохранение слова низкого порядка
long long unsigned long Сохранение младшего dword
long long unsigned long long Сохранение битового шаблона; бит высокого порядка перестает функционировать как бит знака
long long float Представление в виде float . Если long long невозможно представить точно, некоторая точность теряется.
long long double Представление в виде double . Если long long невозможно представить точно в виде double , некоторая точность теряется.
long long long double Представление в виде double . Если long long невозможно представить точно в виде double , некоторая точность теряется.

1 Все записи char основаны на том, что тип char является типом со знаком по умолчанию.

См. также

Преобразования присваиваний