蒋昌会

记录一些值得思考的问题
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于交换整数变量值的问题

Posted on 2010-10-26 17:06  jiangch@Beijing  阅读(110)  评论(0)    收藏  举报

问题:交换整数a和b的方法有几种?

第一种:

int swap(int &a, int &b)
{
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
	return 0;
}

该方法缺点是需要申请一个整形变量,但是不会出现其他数据溢出的问题。

第二种:

int swap(int &a, int &b)
{
	a = a - b;
	b = a + b;
	a = b - a;
	return 0;
}

该方法存在数据溢出的风险。例如a是一个非常大的整数,而b是一个非常小的负数,那么a-b就出现了数据溢出。优点不需要申请多余的变量。

第三种:

int swap(int &a, int &b)
{
	a = a^b;
	b = a^b;
	a = a^b;
	return 0;
}
该方法即客服了数据溢出的问题也避免了申请多余变量。但是存在一个问题是a和b不能是.指向相同变量的引用。否则会导致该变量的值为0。