Преобразования из целочисленных типов без знака
Если целое число без знака преобразуется в целочисленный тип или тип с плавающей запятой и при этом может быть представлено в результирующем типе, значение не изменяется.
Когда компилятор преобразует целое число без знака в целое число большего размера, значение равно нулю. При преобразовании в целое число меньшего размера старшие разряды усекаются. Результат интерпретируется как результирующий тип (см. пример).
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Когда компилятор преобразует целое число без знака в тип с плавающей запятой, если исходное значение не представляется точно в типе результата, результат будет следующим выше или ниже представляемым значением.
Сведения о размерах целочисленных типов и типов с плавающей запятой см. в статье Хранение базовых типов.
Блок, относящийся только к системам Майкрософт
В компиляторе Майкрософт unsigned
(или unsigned int
) и unsigned long
являются отдельными, но эквивалентными типами. Преобразование значения типа unsigned int
выполняется так же, как и преобразование unsigned long
.
Завершение блока, относящегося только к системам Майкрософт
В следующей таблице перечислены преобразования из целочисленных типов без знака.
Таблица преобразований из целочисленных типов без знака
С дт. | По | Способ |
---|---|---|
unsigned char |
char |
Сохранение битового шаблона; бит высокого порядка становится битом знака |
unsigned char |
short |
Нулевое расширение |
unsigned char |
long |
Нулевое расширение |
unsigned char |
long long |
Нулевое расширение |
unsigned char |
unsigned short |
Нулевое расширение |
unsigned char |
unsigned long |
Нулевое расширение |
unsigned char |
unsigned long long |
Нулевое расширение |
unsigned char |
float |
Преобразуйте именно в float |
unsigned char |
double |
Преобразуйте именно в double |
unsigned char |
long double |
Преобразуйте именно в long double |
unsigned short |
char |
Сохранение байта низкого порядка |
unsigned short |
short |
Сохранение битового шаблона; бит высокого порядка становится битом знака |
unsigned short |
long |
Нулевое расширение |
unsigned short |
long long |
Нулевое расширение |
unsigned short |
unsigned char |
Сохранение байта низкого порядка |
unsigned short |
unsigned long |
Нулевое расширение |
unsigned short |
unsigned long long |
Нулевое расширение |
unsigned short |
float |
Преобразуйте именно в float |
unsigned short |
double |
Преобразуйте именно в double |
unsigned short |
long double |
Преобразуйте именно в long double |
unsigned long |
char |
Сохранение байта низкого порядка |
unsigned long |
short |
Сохранение слова низкого порядка |
unsigned long |
long |
Сохранение битового шаблона; бит высокого порядка становится битом знака |
unsigned long |
long long |
Нулевое расширение |
unsigned long |
unsigned char |
Сохранение байта низкого порядка |
unsigned long |
unsigned short |
Сохранение слова низкого порядка |
unsigned long |
unsigned long long |
Нулевое расширение |
unsigned long |
float |
Преобразование в ближайшее представление float |
unsigned long |
double |
Преобразуйте именно в double |
unsigned long |
long double |
Преобразуйте именно в long double |
unsigned long long |
char |
Сохранение байта низкого порядка |
unsigned long long |
short |
Сохранение слова низкого порядка |
unsigned long long |
long |
Сохранение младшего dword |
unsigned long long |
long long |
Сохранение битового шаблона; бит высокого порядка становится битом знака |
unsigned long long |
unsigned char |
Сохранение байта низкого порядка |
unsigned long long |
unsigned short |
Сохранение слова низкого порядка |
unsigned long long |
unsigned long |
Сохранение младшего dword |
unsigned long long |
float |
Преобразование в ближайшее представление float |
unsigned long long |
double |
Преобразование в ближайшее представление double |
unsigned long long |
long double |
Преобразование в ближайшее представление long double |