又看了看C++ Primer,整型提升的原则是"最大限度保持精度"。
最后6(赋值)
例1
int ival = 0;ival = 3.541 + 3
首先3.541+3.000(以最大的精度为标准)
然后6.541(求和)最后6(赋值)
例2
void main()
{
int a=-20;
unsigned int b=6;
printf("%d\n",a+b);
cout<<a+b<<endl;
return;
}
输出
-14
4294967282
为什么这两个输出不一样呢?
printf的%d是当做singed int处理的。
加法先做整型提升,结果是一个unsigned int。
printf看到了%d,把它当做了signed int。
cout的类型以参数中精度最高的为准,所以是unsigned int。
如果改为printf("%u\n",a+b)则输出就一样了。