标签:运算 应该 编译 通知 交换 异或 简单 int style
最近碰到一个面试题是关于变量替换,a= 2,b=5,替换之后b=2,a=5;当时觉得应该是利用编译器的临时变量来搞定,其实不然,结果就是我没做出来,尤其人家的标题写的“初级”,瞬间觉的自己能力不行啊。
回来之后才想起来这个是C语言时候交过的:
1 int a = 2,b=5; 2 a = b + a; 3 b = a - b; 4 a = a - b;
是不是很简单呢,郁闷,当时怎么没想到呢,这几天邪门的很啊。
如果只是上面的那也就不说了,主要是想总结下这种满足交互原则的方法,貌似只要满足交换律似乎就能搞定这个问题啊。
看下一种:
1 int a = 2,b=5; 2 /*a = b + a; 3 b = a - b; 4 a = a - b; */ 5 a = a * b; 6 b = a / b; 7 a = a / b ;
也可以实现呢。
网上貌似也有人这样搞,利用a^b^b == a,异或运算满足交换律,二进制运算的神奇哥哥理解不了:
1 int a = 2,b=5; 2 /*a = b + a; 3 b = a - b; 4 a = a - b; */ 5 /*a = a * b; 6 b = a / b; 7 a = a / b ;*/ 8 a = a ^ b; 9 b = a ^ b; 10 a = a ^ b;
唉,终究是太无知了,难怪等不到录取通知。。。。。。
标签:运算 应该 编译 通知 交换 异或 简单 int style
原文地址:https://www.cnblogs.com/WaterGood/p/9090794.html