从带符号的整数类型的转换

当一个带符号整数转换为等于时的无符号整数或更高版本的大小和该符号整数的值不是负,则值保持不变。 转换通过符号扩展该符号整数进行。 一个带符号整数转换为较短的有符号整数被截断高位比特。 如以下示例所示,结果被解释为无符号值,。

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符号扩展;转换 shortunsigned short

char

unsigned long

long符号扩展;转换 long 为 unsigned long

char

float

long符号扩展;转换 longfloat

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符号扩展;转换 longfloat

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 特定

请参见

概念

分配转换