一般面试中会有这个题目,交换两个变量的值,不需要其他变量。
首先是最常见的交换变量的方法是
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 (&a == &b)
{
return;
}
a ^= b;
b ^= a;
a ^= b;
}
另外,只要 a 和 b 不是同一个变量即可实现交换,a = b 也不例外。
除此之外,如果 a 和 b 的字节数不一致,则只会交换第字节位的数值,高字节位的数值保持不变。
posted on 2011-05-19 14:43
unixfy 阅读(170)
评论(0) 编辑 收藏 引用