实现两个数的交换(异或,加减)
生活随笔
收集整理的這篇文章主要介紹了
实现两个数的交换(异或,加减)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、 通常我們通過設置臨時變量來實現兩個數的交換,如下:
void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;} 2、還可以通過異或來實現兩個不同整數的交換,如下:
void swap(int &a,int &b){temp=a^b; //設a為臨時變量,存儲異或值b=temp^b; //相當于b=aa=temp^a; //相當于a=b
}a=a^b^a;//也可以不設置臨時變量,因為異或值沒有發生變化
b=a^b^b; ? ? ?原理推導:
? ?(1)異或的意義:相同的兩個數異或得0,不同的兩個數異或得1;
? ?(2)異或結論:將兩個數異或的結果與其中一個數再異或,可以得到另一個數;
? ?(3)例子:用異或交換兩個數
? ? ? ? ? ? ?12(001100)^ 34(100010)=101110(結果)
? ? ? ? ? ? ?101110(結果) ^ 001100(12)=100010(34)
? ?(1)異或的意義:相同的兩個數異或得0,不同的兩個數異或得1;
? ?(2)異或結論:將兩個數異或的結果與其中一個數再異或,可以得到另一個數;
? ?(3)例子:用異或交換兩個數
? ? ? ? ? ? ?12(001100)^ 34(100010)=101110(結果)
? ? ? ? ? ? ?101110(結果) ^ 001100(12)=100010(34)
? ? ? ? ? ? ?101100(結果) ^ 100010(34)=001100(12)
3、還可以通過加減實現兩個數的交換,前提是兩個數的和不溢出,如下:
a = a + b; b = a - b; a = a - b;總結
以上是生活随笔為你收集整理的实现两个数的交换(异或,加减)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lintcode--1(463)--整数
- 下一篇: Lintcode--3(366)--斐波