c的整形转换和整形提升

1. integral promotion:整形提升有符号或无符号的char、short、整形的位域,和枚举类型,可以在一个整形可被使用的表达式里使用,如果在int能够容纳这些类型的所有值,则这些类型被转换为int,否则被转换成unsigned int。
2. 整形转换(1)有符号整形转换成无符号整形:a.如果无符号整形跟原整形一样宽,则结果是原整形的机器码被视为无符号整形。 int i = 9;unsigned int j = i;结果 j = 9 int i = -1;unsigned int j = i;结果 j = 0xffffffff(假设int为32位类型)b.如果无符号整形位宽比原整形窄,则结果是原整形高位被截断。    int i = 0xff; unsigned char j = i;结果j = 0xff(假设short为16位)    int i = -1;unsigned char j = i; 结果j = 0xff c.如果无符号整形位宽更宽,原来无符号转换成无符号整形时,高位填充0,原来有符号转换成无符号时,高位为符号扩充。    short i = -1;unsigned int j = i; 结果j = 0xffffffff;    unsigned short i = 0xffff;unsigned int  j = i;结果j = 0xffff;     (2)无符号整形转换成有符号整形:如果转换后的有符号整形能够表示这个无符号整形的数值,则值不变,否则取决于编译器的实现。


3.算术转换如果有一个操作数是long double,另一个被转换成long double否则如果有一个操作数是double,另一个被转换成double否则如果有一个操作数是float,另一个被转换成float否则如果有一个操作数是unsigned long int,另一个被转换成unsigned long int否则如果有一个操作数是long int,另一个被转换成long int否则如果有一个操作数是long int,另一个是unsigned int,如果long int能够表示所有的unsigned int,则另一个unsigned int转换为long int, 如果long int不能表示所有的unsigned int,则两个操作上都转换成unsigned long int否则如果有一个操作数是unsigned int,另一个被转换成unsigned int否则两个操作数都将被转换成int(规则1,整形提升)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值