关于符号扩展

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

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,则转会就会发生错误。

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

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

附:有符号数的转换


方法
charshort符号位扩展
charlong符号位扩展
charunsigned char最高位失去符号位意义,变为数据位
charunsigned short符号位扩展到short;然后从short转到 unsigned short
charunsigned long符号位扩展到long; 然后从long 转到unsigned long
charfloat符号位扩展到long; 然后从long 转到float
chardouble符号位扩展到long; 然后从long 转到double
charlong double符号位扩展到long; 然后从long 转到long double
shortchar保留低位字节
shortlong符号位扩展
shortunsigned char保留低位字节
shortunsigned short最高位失去符号位意义,变为数据位
shortunsigned long符号位扩展到long; 然后从long转到unsigned double
shortfloat符号位扩展到long; 然后从long 转到float
shortdouble符号位扩展到long; 然后从long 转到double
shortlong double符号位扩展到long; 然后从long 转到double
longchar保留低位字节
longshort保留低位字节
longunsigned char保留低位字节
longunsigned short保留低位字节
longunsigned long最高位失去符号位意义,变为数据位
longFloat使用单精度浮点数表示。可能丢失精度。
longdouble使用双精度浮点数表示。可能丢失精度。
longlong double使用双精度浮点数表示。可能丢失精度。
图片点击可在新窗口打开查看

无符号数的转换


方法
unsigned charchar最高位作为符号位
unsigned charshort0扩展
unsigned charlong0扩展
unsigned charunsigned short0扩展
unsigned charunsigned long0扩展
unsigned charfloat转换到long; 再从 long 转换到float
unsigned chardouble转换到long; 再从 long 转换到double
unsigned charlong double转换到long; 再从 long 转换到double
unsigned shortchar保留低位字节
unsigned shortshort最高位作为符号位
unsigned shortlong0扩展
unsigned shortunsigned char保留低位字节
unsigned shortunsigned long0扩展
unsigned shortfloat转换到long; 再从 long 转换到float
unsigned shortdouble转换到long; 再从 long 转换到double
unsigned shortlong double转换到long; 再从 long 转换到double
unsigned longchar保留低位字节
unsigned longshort保留低位字节
unsigned longlong最高位作为符号位
unsigned longunsigned char保留低位字节
unsigned longunsigned short保留低位字节
unsigned longfloat转换到long; 再从 long 转换到float
unsigned longdoubleConvert directly to double
unsigned longlong double转换到long; 再从 long 转换到double


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值