C语言编程:交换两个变量的值 (包括不用中间变量)

 第一种当然很简单了,用中间变量
int a=1,b=2,c;
c=a;
a=b;
b=c;
printf("%d,%d",a,b);

不通过中间变量,交换两个整形变量的值的方法:

 

1.加减法

 

比如

 

a=a+b

 

b=a-b

 

a=a-b

当然 这种方法不怎么好 因为它可能会出现精度损失
比如 a = 3.123456 b = 1234567.000000
交换后各变量值变为:
a = 1234567.000000 b = 3.125000
所以说它适合于交换整型和浮点型数值的变量

2.乘除法

a = a * b;
b = a / b;
a = a / b;

乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。但是乘除法多了一点要求--------b一定不为0。

从上面我们可以看出来:加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。

3.异或法

a ^= b;
b ^= a;
a ^= b;

异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

 

所以说这三种方法各有所用 你要根据自己的情况来选择。。。。。

第4种
int a=1,b=2;
b = (__int64)((__int64)a << 32 | (a = b)) >> 32;
printf("%d,%d",a,b);

 

posted @ 2013-06-09 14:42  永不止步,永无止境  阅读(1545)  评论(0)    收藏  举报