对于所有比int小的整形(char, signed char, unsigned char, short, unsigned short),如过该类型所有可能值都包含在int中,他们会被提升为int型,否则,他们将被提升为unsigned int。
对于包含signed和unsigned int型的表达式,表达式中的signed型整数会被转换为unsigned型。
int i = -5; unsigned int ii = 1; cout<<(i>ii)<<endl; //输出1,非常有趣的结果 原因是int型的i转换为unsigned int型 short i = -5; unsigned short ii = 1; cout<<(i>ii)<<endl; //输出0 比较时short和unsigned short都提升为int型
附加小代码:
/*不用任何循环语句,不用if,来实现1+2+3+...+10的值*/
#include <iostream>
using namespace std;
int add(int c)
{
int a = 0;
c && (a = add(c - 1));//递归循环,直到传入c的值为0则结束循环
cout << c + a << endl;
return c + a;
}
int main()
{
/*add(10);
return 0;*/
int ival;
int *pval;
//ival = pval = 0; //error 尽管ival和pval都可以赋值为0
//ival = 0;
ival = 2;
pval = &ival;
cout << ival << endl;
*pval = 5;
cout << ival << endl;
ival = 7;
cout << ival << endl;
cout << *pval << endl;
cout << pval << endl;
/*cout << sizeof(ival) << endl;
cout << sizeof(pval) << endl;*/
//cout << pval << endl;
//cout << *pval << endl;
//ival = pval;
//ival = 0;
string s1, s2;
//s1 = s2 = "OK"; //ok
//s1 = "OK";
//s1 = s2 = "OK";
int i = -5;
unsigned int ii = 1;
cout << (i>ii) << endl; //输出1,非常有趣的结果 原因是int型的i转换为unsigned int型
short i1 = -5;
unsigned short ii1 = 1;
cout << (i1>ii1) << endl; //输出0 比较时short和unsigned short都提升为int型
}