C++学习注意点

对于所有比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型
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章