数据类型转换

一、短数据类型扩展为长数据类型

1、要扩展的短数据类型为有符号数

      进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变

如1:char x=10001001b;   short y=x;  则y的值应为11111111 10001001b;

    2:char x=00001001b;   short y=x;  则y的值应为00000000 00001001b;

2、要扩展的短数据类型为无符号数

     进行零扩展,即用零来填充长数据类型的高字节位

 

如1:unsigned char x=10001001b;   short y=x;  则y的值应为00000000 10001001b;

    2:unsigned char x=00001001b;   short y=x;  则y的值应为00000000 00001001b;

二、长数据类型缩减为短数据类型

    如果长数据类型的高字节全为1或全为0,则会直接截取低字节赋给短数据类型;如果长数据类型的高字节不全为1或不全为0,则转会就会发生错误。

三、同一长度的数据类型中有符号数与无符号数的相互转化

     直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则一进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对方

 

方法
char 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 转到double
char long double 符号位扩展到long; 然后从long 转到long double
short char 保留低位字节
short long 符号位扩展
short unsigned char 保留低位字节
short unsigned short 最高位失去符号位意义,变为数据位
short unsigned long 符号位扩展到long; 然后从long转到unsigned double
short float 符号位扩展到long; 然后从long 转到float
short double 符号位扩展到long; 然后从long 转到double
short long double 符号位扩展到long; 然后从long 转到double
long char 保留低位字节
long short 保留低位字节
long unsigned char 保留低位字节
long unsigned short 保留低位字节
long unsigned long 最高位失去符号位意义,变为数据位
long Float 使用单精度浮点数表示。可能丢失精度。
long double 使用双精度浮点数表示。可能丢失精度。
long long double 使用双精度浮点数表示。可能丢失精度。
posted @ 2017-04-06 19:26  sinferwu  阅读(328)  评论(0)    收藏  举报