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

浙公网安备 33010602011771号