用按位異或運算符交換兩個數,不引入第三個變量

用按位異或運算符交換兩個數,不引入第三個變量

void swap(int &a , int &b)

{

   a = a^b;

   b = a^b;

   a = a^b;

}

解這個函數,只需要知道抑或運算的一些特性:
1. 異或運算滿足結合律、交換律

2. 按位異或的3個特點:
  (1) 0^0=0,0^1=1  0異或任何數=任何數
  (2) 1^0=1,1^1=0  1異或任何數=任何數取反
  (3)                   任何數異或自己=把自己置0

上面的代碼可以這樣展開理解:

   // 設 a =A, b = B ,  交換要達到的目標爲, a = B, b = A

  a = a^b;   // a = A ^ B

b = a^b;   // 相當於 b = A ^ B ^ B; ==> b = A ^ 0; // by特點3,性質1 ==> b = A; // by特點1       // 現在 b變量持有原a變量的值A。

a = a^b;   // 相當於 a = A ^ B ^ A; ==> a = B ^ 0; // by特點3,性質1 ==> a = B; // by 特點1       // 現在 a變量持有原b變量的值B。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章