何为整型提升
C的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个过程就被成为被称为整型提升。
为什么要整型提升
一般表达式的整型计算是在电脑上的CPU相应的运算器执行,然而CPU的运算器ALU的操作数的字节大小一般是int类型的字节大小,其次CPU中的寄存器的大小也等于int类型的字节大小,而我们知道,数据在被运算的时候不是直接储存在ALU中,而是储存在储存器当中,但通常ALU的字节大小与寄存器的字节大小相等。所以小于4个字节的整型在相加时,在CPU中通常会先转化为CPU中操作数的标准字节长度。
一般cpu是难以实现两个字节的直接相加运算。所以,一般长度小于int类型的整型值,都必须转化为int或unsigned int类型再送入CPU中计算。
怎样整型提升
整型提升有两个规则:
1 如果是无符号的,则高位都补0
2 如果是有符号的,则高位都补符号位
注:在计算机中任何数据储存都是二进制的补码
这里就给大家演示几个例子
注意事项:
1. 它们在储存时是不发生整型提升的,发生整型提升的前提是它们参与了整型运算
char a = -1(这样是不发生的) a + 23(这种时候才发生)
2. 在运算结束后,会发生截断,会返回原来类型的字节数(留低位截高位)
char类型
截断前 0000 0000 0000 0000 0000 0000 0000 0001
截断后 0000 0001