位操做——交換元素值

      《深刻理解計算機系統》中介紹了一種交換元素值的位操做方法,很是巧妙,而且高效,在這裏貼出代碼。數組

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]);

 }

相關文章
相關標籤/搜索