下面这段程序调试了之后结果显示为 5,-7,-2;
#include"stdio.h"
#include"iostream"
using namespacestd;
int main(void)
{
unsigned int a=5;
int b=-7,c=4;
if(b+a>0)
c=a+b,b=c-a;
else
c=a-b,b=c+a;
cout<<a<<","<<b<<", "<<c<<endl;
return 0;
}
本以为结果会是c=12,b=17,a=5不变。主要是因为b+a等于-2是小于零的,进入else中执行。在VISUAL C++中单步调试后发现实际上程序在if判断后进入了if语句。即b+a是大于零成立的。为什么没有进入else呢?重新观察代码后,知道a变量时unsignedint类型,而b是int类型,二者相加之后到底结果是什么类型呢?这就涉及到了不同类型变量运算时类型提升的一个问题!
两个不同类型的变量相加,结果的类型应该遵循下面的原则: