在學習C語言的時候,涉及到兩個變量值的交換,其中用到臨時變量。
類似於:
temp=a; a=b; b=temp;
這樣的語句,如果在沒有臨時變量的情況下,該如何做呢?
網絡上的人們給出了兩種方法:
一、異或法
a=a^b; b=b^a; a=a^b;
二、加減法
a = a + b; b = a - b; a = a - b;
其實我們看加減法更容易理解,也有許多人用這種方法,雖然這些方法可能用不到,但是了解下還是有必要的,至少要讀懂別人的代碼是吧。
下面是一些個人的分析:
首先從簡單的加減法來進行學習測試。
a=a+b;
此時a為兩個數之和,我們用sum來表示,這樣就變成了
sum=a+b;
當
b=a-b;
這個步驟的時候,相當於
b=sum-b;
即
b=a+b-b=a;
最后一步:a=a-b;
也就是a=sum-b,這個時候,b已經變成了a,也就是
a=sum-a=a+b-a=b;
證明結束,嘿嘿,簡單有趣吧。馬上關燈了,明天測試另一個。
今天來看看關於異或的情況
首先是a=a^b;
同理,我們設sum=a^b;
第二步b=b^a; 相當於b=b^sum=b^a^b=a;
第三步:a=a^b=sum^b=a^b^a=b;
其實兩個方法都類似,我們沒有臨時變量,就自己用一個來做臨時變量(相當於臨時變量)來完成我們的交換。
當然,我們要注意,是不是所有的數據類型都能這樣用呢?你可以自己試試哦!