1. 程式人生 > >兩整形變數內容相互交換問題!!!

兩整形變數內容相互交換問題!!!

題目:給定兩個整形變數的值,將兩個值的內容進行交換 !!!

    一般我們拿到這個題會在兩個整數之間數值進行交換引入一個新的臨時整形變數,比如臨時變數C

                                                                      

       如圖我們可以將A的值賦值給新的空置變數C,然後將B的值賦予空置的A,接著將C中儲存有A的值再賦值給空置的B,這樣我們就完成了變數A,B之間內容的交換.下面我們就可以開始寫程式碼,進行測試.

程式實現如下:

我們看下執行結果:

      我們完成了兩個整形變數值內容的交換,那麼我們可以思考我們完成的是否完美,是否還會有其他問題的出現?

     各位是否考慮過如果這個整形變數的值過大的問題呢,我們可以嘗試下交換內容過大會出現什麼問題

我們現在將a,b的值變大其他程式碼不變然後再進行編譯

如圖我們可以發現這與我們的預期結果完全不一致,這是什麼導致的呢!!!

      因為 在32為編譯環境中,int的取值範圍是2^{32 },最大整數為2^{32-1 },有符號數則要去除一個符號位,而此時A,B已經超過取值範圍,所以會出現編譯結果錯誤的情況.

      引入臨時變數的演算法其實還有多種,在這裡只進行一種方法的實驗,有興趣的朋友可以進行其他演算法的嘗試!

後續問題:如果兩個整形變數中的內容進行交換,不能引進第三個變數該如何解決呢!!!

這就需要用到C語言中按位異或運算來解決問題,什麼是異或運算?

簡單來說

異或運算採用二進位制運算規則,兩數相同異或運算後結果變為0,兩數不同進行異或運算後結果變為1

這樣我們就能在不引入臨時變數的情況下將兩個整形變數的內容進行交換

程式實現如下:

                                                                                                                                             若有不足之處希望大家指出,謝謝!!....