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