轉(zhuǎn):題目要求:將數(shù)a窿撬、b的值進行交換,并且不使用任何中間變量叙凡。
程序如下:
#include<stdio.h>
void swapValue1(int &a, int &b) //使用中間變量交換數(shù)據(jù)
{
int temp = a;
a = b;
b = temp;
}
void swapValue2(int &a, int &b)//使用加減運算完成數(shù)據(jù)交換
{
a = a + b;
b = a - b;
a = a - b;
}
void swapValue3(int &a, int &b) //使用位運算交換數(shù)據(jù)
{
a^=b;
b^=a;
a^=b;
}
int main()
{
int a1 = 1, b1 = 2;
int a2 = 3, b2 = 4;
int a3 = 5, b3 = 6;
swapValue1(a1, b1);
swapValue2(a2, b2);
swapValue3(a3, b3);
printf("a= %d b= %d\n",a1, b1);
printf("a= %d b= %d\n",a2, b2);
printf("a= %d b= %d\n",a3, b3);
return 0;
}
解析:第一種:使用中間變量來達到交換數(shù)據(jù)的目的劈伴,這是最大眾的方法,當然了不滿足本題的要求握爷。
第二種:使用簡單的加減操作來達到交換a跛璧、b值得目的。缺點:a+b和a-b時新啼,可能會到導(dǎo)致數(shù)據(jù)溢出赡模。
第三種:采用位運算的方法,按位異或運算师抄。(建議采用這種方式)異或運算:相同的二進制位異或運算為0漓柑,不相同的二進制位異或運算為1。
關(guān)于位運算的知識叨吮,參考http://www.jb51.net/article/87880.htm