主要是利用異或操作。不過,我們首先需要確定
該操作並沒有帶來性能上的提升,下面是步驟詳解。
步驟 | a | b | 備註 |
---|---|---|---|
初始 | - | ||
第一步 | 令b中有56 | ||
第二步 | 結合b去掉23只保留56,存儲在a中 | ||
第三步 | 結合a去掉56,只保留23,存儲在b中 |
下面是測試程序:
#include<stdio.h>
void exchange(int a, int b)
{
printf("Before: a=%d,b=%d\n",a,b);
b = a^b;
a = a^b;
b = a^b;
printf("After: a=%d,b=%d\n",a,b);
}
int main()
{
int a = 23;
int b = 56;
exchange(a,b);
return 0;
}
利用上面的方法,實現了對數組元素的交換:
#include<stdio.h>
void swap(int *x, int *y)
{
*y = *x^*y;
*x = *x^*y;
*y = *x^*y;
}
void reverse_array(int a[], int cnt)
{
int first;
int last;
for(first=0,last=cnt-1;first<=last;first++,last--)
{
if(first == last)
{
break;
}
swap(&a[first],&a[last]);
}
}
int main()
{
int a[] = {1,2,3,4,5};
int aLength = 5;
printf("Before: ");
int i;
for(i=0;i<aLength;i++)
{
printf("a[%d]=%d, ",i,a[i]);
}
reverse_array(a, aLength);
printf("\nAfter: ");
int j;
for(j=0;j<aLength;j++)
{
printf("a[%d]=%d, ",j,a[j]);
}
printf("\n");
return 0;
}