1.原因
cpu中操作数长度一般为int类型长度,所以当变量类型(如char,short)大小未达int时,会发生整型提升,提升至int类型。
2.过程
计算时或者比大小时会发生整型提升
无符号类型(unsigned char等)高位补零,有符号类型(short,char)高位补符号位
3.例子
int main()
{
char a = 5;
//计算时内存中为
//00000000000000000000000000000101
char b = 126;
//00000000000000000000000001111110
char c = a + b;
//00000000000000000000000010000011
//10000011内存中的值
printf("%d", c);
//补码11111111111111111111111110000011
//反码11111111111111111111111110000010
//原码10000000000000000000000001111101
//即输出-125
return 0;
}
计算完成后c的存储值为10000011,但要打印为整形,故打印值为原码,即-125。
关于代码注释中原码,反码,补码的知识,我会在之后的博客中详细介绍。