1:加法
int a=10,b=13;
a=a+b;
b=a-b;
a=a-b;
#include <stdio.h>
int main()
{
int a =10, b =13;
printf("a = %d b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a = %d b = %d\n",a,b);
return 0;
}
2:减法
a = a - b;
b = a + b;
a = b - a;
3:乘法
a = a*b;
b = a/b;
a = a/b;
缺点:当a,b的值较大时,会产生溢出,使结果错误。同时b不能等于0;
4:异或
a = a^b;
b = a^b;
a = a^b;
5:同或
- 前面几种方法很相似,既然异或能完成两个变量的值的交换,那同或能不能呢?观察方法1到4,它们都满足这样的式子,a=a△b△b, △为 为某种运算符,例如1中,△分别对应+和-。4中△对应⊕(⊕为数电中异或符号),即a=a⊕b⊕b。同或同样满足上面的式子,a=a⊙b⊙b(⊙为同或)。
- a=a⊙b
- b=a⊙b
- a=a⊙b
- 又因为C语言中并没有同或运算,因此,把同或表达式转化成 含有按位与、按位或、取反运算的表达式。
- a = (a&b)|(~a&~b);
b = (a&b)|(~a&~b);
a = (a&b)|(~a&~b);
- 除法从数学角度来说虽然也满足上面的式子,但C中 “/“ 运算符的结果为整数,会产生错误,所以除非两个整数成倍数关系,才有可能得到正确结果。
右边的表达式还可以转换成只含或和取反两种运算的式子,或转换成只含与和取反两种运算的式子。因为数电中 ab=(a'+b')'
a+b=(a'b')'
总之,这五种方法本质上就是一种方法。