表达式求值大家很熟悉特别是整型十进制的表达式求值。
那么char类型的表达式求值是怎么样的?
Eg:
#include <stdio.h>
int main()
{
char a = 127;
char b = 3;
char c = a + b;
printf("%d %d %d\n",a,b,c);
return 0;
}
上面程序输出的结果是多少?
a=127,b=3,那么c=130?,如果是这样想就大错特错了。那么c=?,计算这个就涉及到整型提升。
表达式中的字符型、短整型在使用之前转化为普通整型计算,这就叫整型提升。
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器 (ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的 通用寄存器 的长度。
所以我们要将char类型转换为整型再计算。
如何进行整型提升呢?
负整数的整型提升:
正整数的整型提升:
我们已经知道了整型提升,上面的字符型加法我们就可以做了。
总结char 类型的相加
针对补码计算
先整型提升,再相加,截断,得到相加的char 类型的补码,整型提升后,得到 int类型
char 的取值范围
有符号的char取值 -128~127
无符号的char取值0~255
从上面可以看出计算机支持的是有符号的char
算术转换
如果某个操作符的各个操作数属于不同的类型,要转化为相同的类型进行计算,这些都是潜在转换的
Eg:
那算术转换的顺序是怎么样的