今天同学在笔试中遇到一个问题一个无符号的数加一个有符号的负数最后的结果是什么?
例子如下
int a=-19;
unsigned int b=10;
if(a+b>0)
{
printf("a\n");
}
else
{
printf("b\n");
}
问的其实就是有符号的和无符号的相加最终的类型是什么类型?
c++提供了一个叫t#include <typeinfo>用于查看数据的内型头文件
具体使用如下代码
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a = 10;
unsigned b = -19;
char a1 = 127;
char b1 = 10;
short a2 = 0;
int b2 = 1;
cout << typeid(a + b).name() <<" "<<a+b<< endl;
cout << typeid(a1 + b1).name() <<" "<< a1+b1<<endl;
cout << typeid(a2 + b2).name()<<" "<<a2+b2<<endl;
}
测试结果:
所以总结规律有符号的和无符号的都转成无符号的 进行计算,对于非int型的数据运算时转换为int进行计算;计算的结果是中间值在给其他值