首页 > 其他 > 详细

交换a和b

时间:2015-01-27 15:03:51      阅读:294      评论:0      收藏:0      [点我收藏+]
// 交换a和b.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

void swap1(int& a, int& b)
{
	int c = a;
	a = b;
	b = c;
}

/*
加减法运算达到交换a和b,缺点:做a+b 和 a-b运算时可能会导致数据溢出。
*/
void swap2(int& a, int& b)
{
	a = a+b;//使用加减运算完成交换
	b = a-b;
	a = a-b;
}

/*
利用异或:
异或:   对应的二进制位  如果相同则为0,不形同则为1
按位与: 只要有一个为0 就为0
按位或: 只要有一个为1 就为1
*/
void swap3(int& a, int& b)
{
	a = a^b;
	b = b^a;
	a = a^b;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a1 = 1, b1 = 2;
	int a2 = 3, b2 = 4;
	int a3 = 5, b3 = 6;
	int a = 2147483647, b = 23232323;//虽然这里产生了溢出,但是编译运行还是交换了数据,应该是编译器内部做了处理优化

	swap1(a1,b1);
	printf("a1=%d, b1=%d\n",a1,b1);
	swap2(a2,b2);
	printf("a2=%d, b2=%d\n",a2,b2);
	swap3(a3,b3);
	printf("a3=%d, b3=%d\n",a3,b3);

	swap2(a,b);
	printf("a=%d, b=%d\n",a,b);


	getchar();
	return 0;
}

交换a和b

原文:http://blog.csdn.net/djb100316878/article/details/43193733

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!