整型提升(integral promotions)

又看了看C++ Primer,整型提升的原则是"最大限度保持精度"。

例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)则输出就一样了。


你可能感兴趣的:(c)