Преобразования из целочисленных типов со знаком
Если целое число со знаком преобразуется в целое число или тип с плавающей запятой, значение не изменяется, если оно представляется в типе результата.
При преобразовании целого числа со знаком в целое число большего размера значение расширяется со знаком. При преобразовании в целое число меньшего размера старшие разряды усекаются. Результат интерпретируется как результирующий тип (см. пример).
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
Когда компилятор преобразует целое число со знаком в тип с плавающей запятой, если исходное значение не представляется точно в типе результата, результат будет следующим выше или ниже представляемым значением.
Сведения о размерах целочисленных типов и типов с плавающей запятой см. в статье Хранение базовых типов.
В следующей таблице перечислены преобразования из целочисленных типов со знаком. В ней тип char
является типом со знаком по умолчанию. При использовании параметра времени компиляции для изменения значения по умолчанию для типа char
на тип без знака преобразования, перечисленные в таблице Преобразования из целочисленных типов без знака для типа unsigned char
, применяются вместо преобразований в этой таблице.
Блок, относящийся только к системам Майкрософт
В компиляторе Майкрософт int
и long
являются отдельными, но эквивалентными типами. Преобразование значения int
выполняется так же, как и преобразование long
.
Завершение блока, относящегося только к системам Майкрософт
Таблица преобразований из целочисленных типов со знаком
С дт. | По | Способ |
---|---|---|
char 1 |
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
является типом со знаком по умолчанию.