从带符号整型的转换

当带符号整数转换为整数或浮点类型时,如果该值可以在结果类型中表示,则该值不变。

当有符号整数转换为更大的整数时,该值将被符号扩展。 当转换成较小的整数时,高序位将被截断。 使用结果类型解释结果,如本例所示:

int i = -3;
unsigned short u;

u = i;
printf_s( "%hu\n", u );  // Prints 65533

编译器将带符号整数转换为浮点类型时,如果原始值不能在结果类型中完全表示,则结果是下一个更高或更低的可表示值。

有关整型和浮点类型大小的信息,请参阅基本类型的存储

下表汇总了来自带符号整型的转换。 它假定 char 类型在默认情况下是带符号的。 如果你使用编译时选项将 char 类型更改为在默认情况下是不带符号的,则应用的是 unsigned char 类型的从不带符号的整型类型转换表中给定的转换,而不是此表中的转换。

Microsoft 专用

在 Microsoft 编译器中,intlong 是不同但等效的类型。 int 值与 long 的转换方式是一样的。

结束 Microsoft 专用

从带符号整型转换的表

From 功能 方法
char1 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 保留低位双字节
long long unsigned char 保留低位字节
long long unsigned short 保留低位字
long long unsigned long 保留低位双字节
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 类型在默认情况下是带符号的。

请参阅

赋值转换