一般面試中會(huì)有這個(gè)題目,交換兩個(gè)變量的值,不需要其他變量。
首先是最常見的交換變量的方法是
void swap(int& a, int& b)
{
int t = a;
a = b;
b = a;
}
這里借助了輔助變量 t。
另一種方法是利用算數(shù)運(yùn)算
void swap(int& a, int &b)
{
a += b;
b = a - b;
a = a - b;
}
但是這種方法要考慮越界的可能,a + b 有可能越界,如果發(fā)生這種情況,這種方法就不行了。
第三種方法是利用異或運(yùn)算
異或運(yùn)算的原理就是 0 保持,1 取反。
void swap(int& a, int& b)
{
a ^= b;
b ^= a;
a ^= b;
}
這種方法直接進(jìn)行為運(yùn)算,不用考慮是否越界的問題。但是要考慮 a 和 b 是否是同一個(gè)變量,如果是同一個(gè)變量,則最終的結(jié)果是 a = b = 0。
這就達(dá)不到我們想要的交換操作了。所以這種方法應(yīng)該加一個(gè)檢測(cè)。
void swap(int& a, int& b)
{
if (&a == &b)
{
return;
}
a ^= b;
b ^= a;
a ^= b;
}
另外,只要 a 和 b 不是同一個(gè)變量即可實(shí)現(xiàn)交換,a = b 也不例外。
除此之外,如果 a 和 b 的字節(jié)數(shù)不一致,則只會(huì)交換第字節(jié)位的數(shù)值,高字節(jié)位的數(shù)值保持不變。
posted on 2011-05-19 14:43
unixfy 閱讀(172)
評(píng)論(0) 編輯 收藏 引用