从无符号整型转换

无符号整数转换为较短的未签名或带符号整数被截断高位比特,或者转换为一个较长的未签名或带符号整数。零扩展 (请参见 从无符号整型转换 表)。

在使用整型值将降级为较小的某个符号整数,或者无符号整数转换为相应的有符号整数,该值未更改,则会新类型来表示。 但是,值它表示更改,如果符号位设置,如下面的示例上。

int j;
unsigned short k = 65533;

j = k;
printf_s( "%hd\n", j );   // Prints -3

如果它不能表示,因此实现中定义。 有关 Microsoft C 编译器的处理整数的降级的信息,请参见 转换转换 。 相同的行为由整数转换或转换该整数的类型。

无符号值转换将保留它们的值的方法并不能可用的直接在 C。 唯一的例外是从 unsigned long 的转换到 float丢失,至多最低位。 否则,的值为,可以保留签名或未签名。 当整型值转换为浮点数时,因此,该值是在中可用该范围以外,则结果是未定义的。 (请参见 基本类型的存储 有关控件的信息可用于整数类型和浮点类型。)

下表总结了从无符号整型转换。

从无符号整型转换

发件人

若要

方法

unsigned char

char

保留位模式;高位比特成为符号位

unsigned char

short

零扩展

unsigned char

long

零扩展

unsigned char

unsigned short

零扩展

unsigned char

unsigned long

零扩展

unsigned char

float

long的转换; float的转换 long

unsigned char

double

long的转换; 二进制文件的转换 long

unsigned char

long double

long的转换; 二进制文件的转换 long

unsigned short

char

保留低位字节

unsigned short

short

保留位模式;高位比特成为符号位

unsigned short

long

零扩展

unsigned short

unsigned char

保留低位字节

unsigned short

unsigned long

零扩展

unsigned short

float

long的转换; float的转换 long

unsigned short

double

long的转换; 二进制文件的转换 long

unsigned short

long double

long的转换; 二进制文件的转换 long

unsigned long

char

保留低位字节

unsigned long

short

保留低序。

unsigned long

long

保留位模式;高位比特成为符号位

unsigned long

unsigned char

保留低位字节

unsigned long

unsigned short

保留低序。

unsigned long

float

long的转换; float的转换 long

unsigned long

double

直接转换的 二进制文件

unsigned long

long double

long的转换; 二进制文件的转换 long

Microsoft 专用

对于 Microsoft 32 位 C 编译器, unsigned int 类型与 unsigned long 类型等效于。 unsigned int 值的转换与 unsigned long的转换类似的方式执行。 ,如果转换的值大于最大正值签名的 long 值,从 unsigned long 值的转换到 float 不准确。

关闭 Microsoft 特定

请参见

概念

分配转换