码迷,mamicode.com
首页 > 其他好文 > 详细

交换a和b

时间:2015-01-27 15:05:49      阅读:164      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!