规则:向高级的转换
转换级别(Rank)由低到高:char<short<int<long<long long
比如运算 a+b
1)都是有符号或无符号
转换成较高级别(Rank)的,如unsigned int和unsigned long做算术运算都转换成unsigned long
2)一边无符号,另一边有符号
i)如果无符号数的Rank不低于有符号数的Rank
则把有符号数转换成无符号数,如unsigned long和int做运算,都转换成unsigned long
ii)如果无符号数的Rank低于有符号数的Rank
(a)如果有符号数类型能够覆盖无符号类型的取值范围
则把无符号数转换成另一边的有符号类型,如在LP64平台上unsigned int和long做运算,则转换成long
(b)如果有符号数类型不足以覆盖无符号类型的取值范围
则把两边都转换成有符号数的Rank对应的无符号类型,如在ILP32平台上unsigned int和long做算术运算时都转换成unsigned long