posts - 183,  comments - 10,  trackbacks - 0

 

一般面试中会有这个题目,交换两个变量的值,不需要其他变量。

首先是最常见的交换变量的方法是

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

这里借助了辅助变量 t。


另一种方法是利用算数运算

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

但是这种方法要考虑越界的可能,a + b 有可能越界,如果发生这种情况,这种方法就不行了。


第三种方法是利用异或运算

异或运算的原理就是 0 保持,1 取反。

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

这种方法直接进行为运算,不用考虑是否越界的问题。但是要考虑 a 和 b 是否是同一个变量,如果是同一个变量,则最终的结果是 a = b = 0。

这就达不到我们想要的交换操作了。所以这种方法应该加一个检测。

void swap(int& a, int& b)
{
    
if (&== &b)
    {
        
return;
    }
    a 
^= b;
    b 
^= a;
    a 
^= b;
}

 

另外,只要 a 和 b 不是同一个变量即可实现交换,a = b 也不例外。

除此之外,如果 a 和 b 的字节数不一致,则只会交换第字节位的数值,高字节位的数值保持不变。

posted on 2011-05-19 14:43 unixfy 阅读(160) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理