交换两个整数

一、使用临时变量

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 异或都保持不变

 

posted on 2015-03-16 20:52  MoZhao  阅读(244)  评论(0编辑  收藏  举报

导航