1.利用第三个变量交换数值,简单的方法。
int x =5,y=10; //定义两个变量
int temp = x; //定义第三临时变量temp并提取x值
x = y; //把y的值赋给x
y = temp; //然后把临时变量temp值赋给y
2.可以用两个数求和然后相减的方式进行数据交换,弊端在于如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。
int x =5,y=10; //定义两个变量
x = x + y; //x(15) = 5 + 10;
y = x - y; //y(5) = x(15) - 10;
x = x - y; //x(10) = x(15) - y(5)
3.利用位运算的方式进行数据的交换,利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围
int x =5,y=10; //定义两个变量
x = x^y;
y = x^y; //y=(x^y)^y
x = x^y; //x=(x^y)^x
首先关于“异或”有几点性质:
1.任一变量X与其自身进行异或结果为0,即 X^X=0
2.任一变量X与0进行异或结果不变,即 X^0=X
3.异或运算具有可结合性,即 abc = (ab)c = a(bc)
4.异或运算具有可交换性,即 a^b = b^a
5.a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
然后执行过程为:
第一步 a = a ^ b 完成后 a 变量的结果为 a ^ b;
第二步 b = a ^ b 等号右边即是 (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a,
经过第二步运算后b中的值为a;
第三步 a = a ^ b 此时赋值号右边的a保存的仍然是 a ^ b 的值,而赋值号右边的b已经是原始的a了,
即等号右边的 a ^ b = (a ^ b) ^ a = a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b, 该值赋值给a,即 a = b,
经过第三步运算后a中的值为b;
网友评论