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

交换两个整数

时间:2015-03-16 22:31:49      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

一、使用临时变量

C版本:

void swap(int* a, int* b)
{
int temp = 0;
temp = *a;
*a = *b;void swap(int& a, int& b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
*b = temp; }

C++版本:

void swap(int& a, int& b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}


二、不使用临时变量

方法一:

void swap(int& a, int& b)
{
if(a == b)
 return;
if(a > 0 && b > 0) || (a < 0 && b < 0)
{
a = a - b;
b = b + a;
a = b - a;
}
else
{
a = a + b;
b = a - b;
a = a - b
}
}

此方法需要考虑变量溢出问题。如果两数为同号,则以其“差”作为运算的中间变量;如果两数为异号,则以其“和”作为运算的中间变量。
方法二:

void swap(int& a, int& b)
{
if(a == b)
 return;
a ^= b;      //a与b不同的bit为1,相同为0
b ^= a;      
a ^= b;  
}

此方法记住两条原则即可理解:
任何一位二进制数同 1 异或都会变成另外一个
任何一位二进制数同 0 异或都保持不变

 

交换两个整数

标签:

原文地址:http://www.cnblogs.com/DeafeningZhao/p/4342828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!