一、什么是整型提升
如果用一句话来说明整型提升那就是:只要是char类型和short类型的数据, 并且被使用或者说是只要参与运算,那么它们就会发生整型提升,被转化为普通整型
二、怎么整型提升
就一句话,无符号数补0,有符号数补符号位的数(符号位是0则补0,是1则补1)
三、实例说明
3.1牛刀小试
char a=1;char b=-1;char c=a+b;
根据以上代码现在c的结果是多少呢?
a和b都是有符号的char类型数据,在c=a+b这个表达式中,a和b都参与了运算,所以要发生整型提升
a的补码为 00000001 整型提升后要转换为32个比特位的int类型,而a此时只有8位,又因为a的符号位是0,所以其他位要补0,最终a整型提升后的补码为:00000000 00000000 00000000 00000001
b的补码为 11111111 ,道理同a,不过a的符号位是1,所以其余位要补1,最终b的补码为:11111111 11111111 11111111 11111111
a+b的补码为 00000000 00000000 00000000,
而c的类型是char类型,它只有8个比特位大小的空间,因此a+b的补码被截断,只有后八位被存入c中,也即是 c=0
3.2初露锋芒
毫无疑问,sizeof(a)的结果就是1,但是sizeof(+a)就不同了,a是char类型数据,并且被使用了,使用它会发生整型提升转化为整型,整型占四个字节,所以第二个结果是4,sizeof(-a)和sizeof(+a)完全相同,结果如下:
3.3轻松收尾
上述代码只有成功打印,原因很简单 ,就两点,a和b分别是char,short类型的数据,并且它们都被使用了(if语句里的判等),所以它们会发生整型提升,自然会不同,而c本身是int类型,毫无影响,结果如下:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net