在计算机内部是通过补码进行计算整形数据的。
而一般的通用寄存器长度为4字节
短整型以及字符类型的变量之间或者相互进行算术运算操作时,就会发生整型提升
一般先将其整型提升为4字节数据再进行运算
将其提升为4字节数据的时候,为使其符号不发生变化,前面添加的数字与原数据符号位相同
比如:
int main()
{
char c1 = 3;
char c2 = 127;
char c3 = c1 + c2;
printf("%d\n", c3);
return 0;
}
在这段代码中,按照正常的理解应该是输出130
可是由于在计算机计算的时候,是在4字节的长度上进行计算的
所以实际上计算过程是这样的:
在内存中,数据都是以补码的形式进行运算的。
而存储c1+c2的值c3是char型的数据,只能存储8位的数据
故,c3中保存的应该是 10000010
而下面打印的时候,输出是以%d 即整数形式输出的,所以需要将c3中的数据进行整形提升