对于变量 a1 OP a2
c语言有一套隐式转换的规则
如果a1 a2都为小于integer类型,如short,char
即使a1,a2都为同一类型,也会进行转换
如果你还是感觉不知所云 那么请看下面代码
#include <iostream>
int main()
{
char c1 = 1;
char c2 = 2;
printf("%d", sizeof(c1 + c2));
return 0;
}
c1,c2都为char型,在做加法过程中,类型大小已经为4,被intergal promotion为int类型了。
至于高于int的隐式转换,则以最高位数的参数为准转换
+ - * / % > < >= <= == !=运算符都需要做Usual Arithmetic Conversion
单目运算符+ - ~只有一个操作数,移位运算符<< >>两边的操作数类型不要求一致,这些运算不需要做Usual Arithmetic Conversion,但也需要做Integer Promotion