C语言的整形算术运算(在进行算术(表达式)运算的时候发生整形提升)总是至少以缺省(缺省的意思就是系统默认状态,就是默认的意思)整形类型的精度来进行的,为了获得这个精度,表达式中的字符和短整型操作数在使用之前会被转换成普通整形。这种转换叫做整形提升
整形提升的意义
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度
一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。
整形提升:
假如是char的情况。在进行表达式运算的时候先把各个字符数字二进制的补码进行整形提升,然后再进行截断(从低位开始截断,截断8位)然后再高位补充符号位,如果是无符号的,默认是正数,补充0,如果是有符号的,是负数的时候补充1,是正数的时候补充0,然后再得出结果的这样的一个过程
//比如:
char a = -1;//第一步写出他的整形二进制补码先
//原码:100000000000000000000000000000001
//反码:111111111111111111111111111111110
//补码:111111111111111111111111111111111
//第二步:进行截断
//11111111
//第三步:根据最高位进行补充
//11111111111111111111111111111111