《深刻理解計算機系統》中介紹了一種交換元素值的位操做方法,很是巧妙,而且高效,在這裏貼出代碼。數組
void inplace_swap(int *x, int *y)函數
{spa
*y=*x^*y;it
*x=*x^*y;ast
*y=*x^*y;方法
}計算機
這個函數能夠實現x和y指向的元素的值的交換,^表明異或操做。證實能夠分x,y各位元素爲00,01,10,11四種狀況討論。因爲是位操做,因此比通常的交換數值的方法高效。一個應用是數組元素反序。代碼也貼在這裏,僅供參考:深入理解計算機系統
void reverse_array(int a[],int cnt)void
{printf
int first,last;
for(first=0,last=cnt-1;first<last;first++,last--)
inplace_swap(&a[first],&a[last]);
for(first=0;first<cnt;first++)
printf("%d ",a[first]);
}