从带符号的整数类型的转换
当一个带符号整数转换为等于时的无符号整数或更高版本的大小和该符号整数的值不是负,则值保持不变。 转换通过符号扩展该符号整数进行。 一个带符号整数转换为较短的有符号整数被截断高位比特。 如以下示例所示,结果被解释为无符号值,。
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
信息不会丢失,在一个带符号整数转换为浮点值时,除此之外,某些精度可能丢失,当 长的 int 或 无符号 long int 值转换为 float 值。
下表总结了从带符号的整数类型的转换。 此表假定默认情况下, char 类型签名。 如果使用编译时选项更改 char 类型的默认值设置为无符号,在 unsigned char 类型的 从无符号整型转换 表给出的转换在下表中应用而不是强制转换,从带符号的整数类型的转换。
从带符号的整数类型的转换
发件人 |
若要 |
方法 |
---|---|---|
char1 |
short |
符号扩展 |
char |
long |
符号扩展 |
char |
unsigned char |
保留模式;高位比特丢失作为符号位 |
char |
unsigned short |
为 short符号扩展;转换 short 为 unsigned short |
char |
unsigned long |
为 long符号扩展;转换 long 为 unsigned long |
char |
float |
为 long符号扩展;转换 long 为 float |
char |
double |
为 long符号扩展;转换 long 为 二进制文件 |
char |
long double |
为 long符号扩展;转换 long 为 二进制文件 |
short |
char |
保留低位字节 |
short |
long |
符号扩展 |
short |
unsigned char |
保留低位字节 |
short |
unsigned short |
保留位模式;高位比特丢失作为符号位 |
short |
unsigned long |
为 long符号扩展;转换 long 为 unsigned long |
short |
float |
为 long符号扩展;转换 long 为 float |
short |
double |
为 long符号扩展;转换 long 为 二进制文件 |
short |
long double |
为 long符号扩展;转换 long 为 二进制文件 |
long |
char |
保留低位字节 |
long |
short |
保留低序。 |
long |
unsigned char |
保留低位字节 |
long |
unsigned short |
保留低序。 |
long |
unsigned long |
保留位模式;高位比特丢失作为符号位 |
long |
float |
表示为 float。 如果 long 不能正确地表示,某些精度丢失。 |
long |
double |
表示为 二进制文件。 如果 long 不能正确地表示为 二进制文件,某些精度丢失。 |
long |
long double |
表示为 二进制文件。 如果 long 不能正确地表示为 二进制文件,某些精度丢失。 |
1. 所有 char 项假定默认情况下, char 类型签名。
Microsoft 专用
对于 Microsoft 32 位 C 编译器,整数与 long等效。 int 值获得的转换与相同 long的。
关闭 Microsoft 特定