問題:一般我們要交換兩個變數的值,多會採取一個額外變數來實現,比如temp=a,a=b,b=temp,現在我們能不利用temp來實現交換a,b兩個變數值的目的嗎? 解決方案:^異或運算符,而且我們會發現a^a=0,還有0^a=a,依據這兩條理論,我們可以實現之前提出的問題。 代碼如下: #inclu ...
問題:一般我們要交換兩個變數的值,多會採取一個額外變數來實現,比如temp=a,a=b,b=temp,現在我們能不利用temp來實現交換a,b兩個變數值的目的嗎?
解決方案:^異或運算符,而且我們會發現a^a=0,還有0^a=a,依據這兩條理論,我們可以實現之前提出的問題。
代碼如下:
#include<stdio.h>
void inplace_swap(int * x,int * y)
{
*y=*x^*y;
*x=*x^*y;
*y=*y^*x;
}
int main()
{
int a=3,b=4;
printf("交換之前:a=%d,b=%d\n",a,b);
inplace_swap(&a,&b);
printf("交換之後的值:a=%d,b=%d\n",a,b);
return 0;
}
說明:首先*y=*x^*y 此時a=a,b=a^b
再者*x=*x^*y 此時a=a^a^b,運用上面的兩條公式有,a^a^b=0^b=b,此時,a=b,b=a^b
最後*y=*y^*x 此時b=a^b^b,同上,b=a^0=a;這樣就實現了交換a,b值的目的了。