表达式求值的过程中,往往会伴随着数据类型的自动转换,而数据类型的转换的一般情况如下所示,从低到高。
long double
double
float
unsigned long int
long int
unsigned int
int
有几点需要注意:
1. 这里没有出现char,short,enum,因为它们会被自动转换为int或是unsigned int类型
2. 当unsigned int 和 int 出现在同一个式子中时,需要注意,如:5u – 10,结果是大于0的,不是-5,而是4294967291
3. 另外对于32位机,由于long int的表现形式与int相同,unsigned int的表现形式与unsigned long int相同,因此long int的数值范围无法包含unsigned int,因此在32位机进行处理时,它们间的类型的自动转换可以理解为4位的有符号自动转为4位的无符号,然后再向上转为float型等;如 unsigned int a = 45; long int b = 2147483643; a + b中可以理解为都转换成了unsigned long类型