資料的交換在處理資料上很常使用,也是在初學程式設計上會碰到的問題,以下介紹幾種方法:
(一)利用相同型態的額外變數(假設是C)當緩衝,交換資料,方式如下:
::::::::::::::::::::::::::::::::::::::::::::::
//交換A與B
void main()
{
int A=10,B=20,C;
C = B;
B = A;
A = C;
}
::::::::::::::::::::::::::::::::::::::::::::::
(二)以下的方式是不需要額外的空間來做交換:
(1)利用加減法運算來達到資料交換的目的,方式:
::::::::::::::::::::::::::::::::::::::::::::::
//交換A與B
void main()
{
int A=10,B=20;
A = A + B ;
B = A - B ;
A = A - B ;
}
::::::::::::::::::::::::::::::::::::::::::::::
缺點:當A與B做加減運算時,會有溢位的問題發生!!!
(2)利用互斥或(Exclusive-OR)運算來達到資料交換的目的,方式:
::::::::::::::::::::::::::::::::::::::::::::::
//交換A與B
void main()
{
int A=10,B=20;
A = A ^ B;
B = B ^ A;
A = A ^ B;
}
::::::::::::::::::::::::::::::::::::::::::::::
注意:A^=B^=A^=B;這種寫法,除法清楚的瞭解編譯器的處理或次序,否則較不適合
改寫:以下交換的程式可以利用循序運算子(,)做改寫:A^=B, B^=A, A^=B;
巨集:可寫成巨集的方式:#define swap(x,y) (x^=y,y^=x,x^=y)
Written By Jame On 2003/09/01