1.首先明确char类型变量是整数类型变量的一员,字符都是由ASC码代表的。
2.一个char一个字节(8个比特位),小于等于int类型的变量进行运算时首先进行整形提升(
表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀ 般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。
因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓
度。
通⽤CPU(general-purpose CPU)是难以直接实现两个8⽐特字节直接相加运算(虽然机器指令中
可能有这种字节相加指令)。所以,表达式中各种⻓度可能⼩于int⻓度的整型值,都必须先转换为
int或unsigned int,然后才能送⼊CPU去执⾏运算)。
3.char类型会发生截断和整形提升,
上图中的实例
C1、C2在运算前先发生整形提升,得到c3 00000000 00000000 00000000 10000111,
然后截断变回一个字节的大小10000111存储在c3中,在printf语句中需要访问时又发生整形提升,再由补码变回原码,大小为-121(一个没有对应字符的ASC||码数值)
但如果直接打印printf("%d",c1+c2);那么结果就是135(1000 0111),不会发生整形提升,%d 是直接打印有符号的整数。