不使用第三方變數交換變數遇到的思考

2022-08-17 00:54:14 字數 964 閱讀 8809

記一次在不使用第三方變數的情況下交換變數遇到的思考

在不使用第三方變數的情況下交換變數的幾種方法

對其中的一種交換變數的方法特別感興趣,看起來比較簡單,但是琢磨了半天沒有想明白他是按什麼順序去執行的 :

1

public

static

void

main(string args)

結果為
1 a:2000 b:1000
糾結了一晚上,不知道他的執行過程

最後在檢視反編譯檔案時發現很簡單

1

public

static

void

main(string args)

但(b=a)一定要放在a=b的右邊

因為程式在編譯時會(b=a)前的值抽取出來放到第三方變數,然後就開始運算括號內的賦值

1       a  =  ( b  =  a ) * 0 +b ;2//

a = ( b = 1000 ) * 0 + 1000 此時後面的b已經是1000了3/*

4碰到括號然後碰到等號,先賦值運算

5此時b=a=1000

6然後再*0+b,返回給a

7結果就是a=2000,b=1000

8*/

那麼正常情況

1       a  =  b + ( b  =  a ) * 0;2//

a = 2000 + ( b = 1000 ) * 0; 3/*

4編譯先賦值碰到括號和=號

5就會先賦值完成後直接運算括號內的內容

6所以a=2000+(b=1000)*0;

7因為括號優先順序運算更高

8所以這時b=1000已經全部賦值完了

9再執行括號外的表示式

10結果就是a=2000,b=1000

11*/

不使用第三方變數交換兩個變數的值

這需要進行位操作,必較麻煩的,在學習程式語言和進行程式設計的時候,交換兩個變數的值是經常要使用的。通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特...

不使用第三方變數交換兩個變數的值

這需要進行位操作,必較麻煩的,在學習程式語言和進行程式設計的時候,交換兩個變數的值是經常要使用的。通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特...

不使用第三方變數交換兩個變數的值

這需要進行位操作,必較麻煩的,在學習程式語言和進行程式設計的時候,交換兩個變數的值是經常要使用的。通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特...