一般我們在寫程式時如果遇到兩個數需要交換時寫作如下:
1intx,y;23
inttemp;
45 temp=x;x=y;y=temp;
而如果不允許有第三個變數出現即不允許有temp出現時應該如何做呢?可以寫作如下:
1intx,y;
23 x=x+y;
45 y=x-y;
67 x=x-y;//
上述一般可以滿足,但是有時候x+y或許或出現上溢或者下溢。
而利用兩個數的異或或許更加巧妙——
異或有如下性質:
交換律:x^y=y^x
結合律:x^(y^z)=(x^y)^z
而相同的兩個數異或則使得此數為0,故兩個變數可以如下變換:
1 x=x^y;23 y=x^y;//
實際意思y=(x^y)^y;
45 x=x^y;//
實際意思x=(x^y)^x;
兩個數字交換不用第三個變數
交換函式 注意 雖然不用第三方變數的寫法感覺很牛,但是在複雜的程式環境中容易出現bug 下面會舉例bug 並且技巧性越強的 bug越不好找 因此只需掌握不用第三個變數的思路,平時最好用第三個變數來交換兩個數字 1.常用,最好理解 用第三方變數協助交換 相當於一瓶可樂,一瓶雪碧交換,用乙個空瓶子實現 ...
php不用第三個變數,交換兩個數的值
字串版本 結合使用substr,strlen兩個方法實現 a a b b echo 交換前 a a.b b.a.b b substr a,0,strlen a strlen b a substr a,strlen b echo 交換後 a a.b b.echo 字串版本 使用str replace方...
如何不使用第三個變數來交換兩個數的值
複試面試老師問了這個問題,當時真的不知道.1 算術運算 簡單來說,就是通過普通的 和 運算來實現。如下 int a,b a 10 b 12 a b a a 2 b 12 b b a a 2 b 10 a b a a 10 b 10 通過以上運算,a和b中的值就進行了交換。表面上看起來很簡單,但是不容...