从带符号整型的转换
当带符号整数转换为整数或浮点类型时,如果该值可以在结果类型中表示,则该值不变。
当有符号整数转换为更大的整数时,该值将被符号扩展。 当转换成较小的整数时,高序位将被截断。 使用结果类型解释结果,如本例所示:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
编译器将带符号整数转换为浮点类型时,如果原始值不能在结果类型中完全表示,则结果是下一个更高或更低的可表示值。
有关整型和浮点类型大小的信息,请参阅基本类型的存储。
下表汇总了来自带符号整型的转换。 它假定 char
类型在默认情况下是带符号的。 如果你使用编译时选项将 char
类型更改为在默认情况下是不带符号的,则应用的是 unsigned char
类型的从不带符号的整型类型转换表中给定的转换,而不是此表中的转换。
Microsoft 专用
在 Microsoft 编译器中,int
和 long
是不同但等效的类型。 int
值与 long
的转换方式是一样的。
结束 Microsoft 专用
从带符号整型转换的表
From | 功能 | 方法 |
---|---|---|
char 1 |
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
类型在默认情况下是带符号的。