在c/c++中不同类型数据运算时会隐式的转化到更大数据类型进行运算,所以有时运行结果很令人费解。
#include <iostream>
#include <string>
using namespace std;
int main()
{
short s = 'a';
unsigned int ui = 1000;
int i = -2000;
double d = i;
cout << "d = " << d << endl;
cout << "ui = " << ui << endl;
cout << "ui + i = " << ui + i << endl;
if ((ui + i) > 0) //当一个unsigned int数和一个int相加时 会将进行运算的两个数隐式的转化为unsigned int后在进行相加 所以输出一个很大的整数
{
cout << "Positive" << endl;
}
else
{
cout << "Negative" << endl;
}
//当char与short类型进行运算,会隐式的转化为int类型 所以输出4
//之所以会转化为int 因为对于编译器来说int类型的运算更加高效
cout << "sizeof(s + 'b') = " << sizeof(s + 'b') << endl;
return 0;
}
gcc中运行结果为
d = -2000
ui = 1000
ui + i = 4294966296
Positive
sizeof(s + 'b') = 4
vc++中运行结果为
d = -2000
ui = 1000
ui + i = 4294966296
Positive
sizeof(s + 'b') = 4