1、方法一:其他语言实现(C语言)
a = 1;
b = 2;
a = b - a; // a = 1; b = 2
b = b - a; // a = 1; b = 1
a = b + a; // a = 2; b = 1
1) 原理:
把a、b看做数轴上的点,围绕两点间的距离来进行计算。
2) 具体过程:
① a=b-a求出a、b两点的距离,并将其保存在a中;
② b=b-a求出a到原点的距离(b到原点的距离与a、b两点距离之差),并将其保存在b中;a=b+a求出b到原点的距离(a到原点距离与a、b两点距离之和),并将其保存在a中。
3) 缺点:
① 只能用于数字类型,不能用于字符串;
② a+b有可能溢出(超出int的范围),但溢出是相对的,+溢出,可以-回来,所以溢出不溢出没关系,就是不安全。
程序实现:
输出结果为:
2、方法二:其他语言实现(C语言)
a = 10; // a = 1010
b = 12; // b = 1100
a = a ^ b; // a = 0110,b = 1100
b = a ^ b; // a = 0110,b = 1010
a = a ^ b; //a = 1100 = 12,b = 1010 = 10
原理:由异或运算的特点决定,通过异或运算能够使数据中的某些位翻转,其他位不变,这就意味着任意一个数a与任意一个给定的值b连续异或两次,值不变。
a ^ b ^ b == a;
输出结果是: