总之,编译器通过校验表来确定在算术表达式中执行的转换。下面是一个列表,编译器将依次查阅该列表:
①如果有一个操作数的类型是long double,则将另一个操作数转换为long double 。
②否则,如果有一个操作数的类型是double,则将另一个操作数转换为double 。
③否则,如果有一个操作数的类型是float,则将另一个操作数转换为float 。
④否则,说明操作数都是整型,因此执行整型提升。
⑤在这种情况下,如果有一个操作数的类型是unsigned long,则将另一个操作数转换为unsigned long。
⑥否则,如果·个操作数是long int,而另一个操作数是unsigned int,则转换取决于两种类型的相对长度。如果long能够表示unsigned int的所有可能值,则将unsigned int转换为long。
⑦否则,将两个操作数都转换为unsigned long。
8 否则,如果一个操作数是long,则将另一个操作数转换为long。
⑨否则,如果个操作数是unsigned int,则将另一个操作数转换为unsigned int。
⑩如果编译器到达此处,则说明两个操作数都是int类型。