記一次在不使用第三方變數的情況下交換變數遇到的思考
在不使用第三方變數的情況下交換變數的幾種方法
對其中的一種交換變數的方法特別感興趣,看起來比較簡單,但是琢磨了半天沒有想明白他是按什麼順序去執行的 :
1public
static
void
main(string args)
結果為
1 a:2000 b:1000糾結了一晚上,不知道他的執行過程
最後在檢視反編譯檔案時發現很簡單
1public
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 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特...