Char转为int时高位符号扩展的问题



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

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

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

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

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

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

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

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

    2unsigned 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

使用双精度浮点数表示。可能丢失精度。

无符号数的转换

 

方法

unsigned char

char

最高位作为符号位

unsigned char

short

0扩展

unsigned char

long

0扩展

unsigned char

unsigned short

0扩展

unsigned char

unsigned long

0扩展

unsigned char

float

转换到long; 再从 long 转换到float

unsigned char

double

转换到long; 再从 long 转换到double

unsigned char

long double

转换到long; 再从 long 转换到double

unsigned short

char

保留低位字节

unsigned short

short

最高位作为符号位

unsigned short

long

0扩展

unsigned short

unsigned char

保留低位字节

unsigned short

unsigned long

0扩展

unsigned short

float

转换到long; 再从 long 转换到float

unsigned short

double

转换到long; 再从 long 转换到double

unsigned short

long double

转换到long; 再从 long 转换到double

unsigned long

char

保留低位字节

unsigned long

short

保留低位字节

unsigned long

long

最高位作为符号位

unsigned long

unsigned char

保留低位字节

unsigned long

unsigned short

保留低位字节

unsigned long

float

转换到long; 再从 long 转换到float

unsigned long

double

Convert directly to double

unsigned long

long double

转换到long; 再从 long 转换到double

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值