从无符号整型转换
无符号整数转换为较短的未签名或带符号整数被截断高位比特,或者转换为一个较长的未签名或带符号整数。零扩展 (请参见 从无符号整型转换 表)。
在使用整型值将降级为较小的某个符号整数,或者无符号整数转换为相应的有符号整数,该值未更改,则会新类型来表示。 但是,值它表示更改,如果符号位设置,如下面的示例上。
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 特定