1.什么是整型提升?
C语言中的算数运算表达式总是以整型的精度进行的,为了获得这个精度,表达式的字符和短整型操作数在使用之前被隐式转换为普通类型即整型提升。
2.整型提升的意义。
表达式的整型运算在CPU的相应运算器件内执行,CPU内整型运算器ALU的操作数字的字节长度一般为int的字节长度,同时也是CPU寄存器的长度。因此,两个char类型相加,在CPU执行时要先转换为CPU的标准长度,而通用的CPU是难以实现两个8个比特位的直接相加的,所以小于int类型的表达式计算时要转换为int/unsigned int 然后才能送入CPU中执行运算。
3.如何执行整型提升?
实例1 代码演示
看到结果是不是简直不敢相信自己的眼睛?不要惊讶,follow me!
这里有一点需要注意变量中存放的是补码,而打印的是源码!
所以c中的是补码,这里是以%d的形式打印,因此还要一次整型提升。
所以这就是为什么c=-126。
4.整型提升的规则
整型提升是按照变量数据类型的符号来提升的。
负数:
例:char a=-1; 11111111
因为符号位是1
所以提升为:11111111111111111111111111111
正数:
例:char b=1;00000001
因为符号位是0
所以提升为:00000000000000000000000001
5.实例
0x表示十六进制,十六进制一位占4个比特位所以以上均不会溢出。
a和b在进行比较时进行了整型提升与原来不同了,而c本身就是int类型无需提升因此是c。
c没有参与整型提升故为1,+c参与了运算发生了整型提升为int所以是4,!c 也没有进行运算故为1;
总结:
char short 等类型只要参与了运算就会发生整型提升。