一般面試中會有這個題目,交換兩個變量的值,不需要其他變量。
首先是最常見的交換變量的方法是
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 閱讀(172)
評論(0) 編輯 收藏 引用