Поделиться через


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

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

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

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

См. также

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