1、什么是整型提升?
C语言进行整型算数运算时,总是以缺省整型类型来进行计算的,为了获得这个精度,表达式中的字符型和短整型的操作数在使用之前需要被转化成普通整型,这种转化成为整型提升。
注意 :这里的缺省整型一般是int,
2、整型提升的意义?
cpu内整型运算器(ALU)的操作数的字节长度一般是int的字节长度,同时也是CPU通用寄存器的字节长度,所以表达式中各种可能小于int长度的整型值,都必须先转化为int或unsigned int ,然后才能送进CPU去执行计算。
3、如何进行整型提升?
#include <stdio.h>
int main()
{
char a=-1;//-1为signed int 的值
//-1的原码:10000000 00000000 00000000 00000001
//-1的补码:11111111 11111111 11111111 11111111
//a是一个char的值,所以a的补码:11111111
char b=2;
//2的原码:00000000 00000000 00000000 00000002
//由于b正整数的原码、反码、补码相同,所以2的补码及原码
//所以b的补码:00000002
char c=a+b;
//在此表达式中,a、b需要进行整型提升
//原理是,我们要把char变为int,把一个字节提升为四个字节,
//因此,我们要把a补码向左补齐24个0或1
//补0还是补1,我们要看的符号位,有符号,我们就补1,无符号我们就补0
//不难发现a的补码最左侧的数字位1,因此,我们要向左补24个1
//a进行整型提升:11111111 11111111 11111111 11111111(补码)
//b进行整型提升:00000000 00000000 00000000 00000002(补码)
//a+b的补码 : 00000000 00000000 00000000 00000001(补码)
c的补码:00000001
printf("%d\n",c);//此处%d要求我们以整型输出c的值,
// 我们还要对c进行整型提升,求得四字节的补码,在求得原码,输出的即是,原码对应的值
}
需要进行整型提升一般就是char和short这两种数据类型