#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = -20;
unsigned int n;
unsigned int b = 6;
//用一个int去接,返回int
if(((int)(a + b)) < 0)
cout<< "1 ret is int..." <<endl;
else
cout<< "1 ret is uint..." <<endl;
if(a + (int)b < 0)
cout<< "2 ret is int..." <<endl;
else
cout<< "2 ret is uint..." <<endl;
//这种int会类型提升返回uint
if(a + b < 0)
cout<< "3 ret is int..." <<endl;
else
cout<< "3 ret is uint..." <<endl;
n = a + b;
cout<< n <<endl;
printf("%d\n",a + b);
printf("%u\n",a + b);
return 0;
}
看代码:int a = -20 uint b = 6
第一种情况是有值去接这种加减算法,类型会根据返回值的类型输出;
①定义一个int n = a + b 则 n为 int 型;
②定义一个uint n = a + b 则 n为 uint型;
第二种情况是作为判断语句相加减;举例子 if语句
①if (a + b) 这时候int a的类型会类型提升为uint,所以这个条件会一直为true;
②if ( a + (int)b ) 这时候b做了int类型强制转换,所以这个值就为false;
③if ( (int)(a + b) ) 这时候把(a + b)的值做了强制转换,也为false;
应该注意的是当int 和 uint运算作为判断语句的时候,特别要注意不要直接运算;