黑马程序员技术交流社区

标题: 关于^位运算符的一些运用问题 [打印本页]

作者: ytblght55    时间: 2013-6-21 10:37
标题: 关于^位运算符的一些运用问题
本帖最后由 巩建 于 2013-6-21 11:20 编辑
  1. /*
  2. 需求:将x和y的值互相倒换,不通过第三方变量.
  3. 思路:一个数^一个数2次那么还是原数
  4. 步骤:
  5. 1、x=x ^y 将x的值^上y用x记录该值
  6. 2、y=x^y 因为x的值为x^y即等式为y=x^y^y,一个数^一个数2次那么该值为x
  7. 3、x=x^y 因为y的值为x^y,x的值为x^y,即等式可以写成x=x^y^x^y
  8. 疑惑点:?为什么x最后会等于2
  9. */
  10. class Demo{
  11. public statci void main(String args[])
  12. {
  13. int x =4;int y=2;
  14. x=x^y;
  15. y=x^y;
  16. x=x^y;
  17. System.out.println("y="+y+","+"x="+x);
  18. }
  19. }
复制代码
疑惑点:?为什么x最后会等于2即y的值. 即步骤三里面的赋值表达式x=x^y;为什么等于2即 y????
作者: msileandroid    时间: 2013-6-21 10:54
1.x=x^y;
2.y=x^y;
3.x=x^y;
1:x=(x^y);
2:y=(x^y)^y;这时y=x;
3:x=(x^y)^(x);这时x=y;

作者: 陈鹏    时间: 2013-6-21 11:07
x=x^y;
y=x^y;即表示y=(x^y)^y=x
x=x^y;即表示x=(x^y)^x=y,这里的y已经用前面的换到的x代替了

一个数异或另外一个数两次得到的结果还是这个数
作者: ytblght55    时间: 2013-6-21 11:14
msileandroid 发表于 2013-6-21 10:54
1.x=x^y;
2.y=x^y;
3.x=x^y;

:)理解了谢谢
作者: ytblght55    时间: 2013-6-21 11:19
面试题,大家可以记忆下!!
作者: ytblght55    时间: 2013-6-21 11:21
我相信很多人都会在这里卡壳,我也是新手,想了老半天!!!
作者: Household    时间: 2013-12-8 21:14
这确实要转个弯,楼主技术分忒高,感谢提了个醒!!
作者: 静水流华    时间: 2013-12-8 21:18
这是典型的交换算法,
a = a^b;//将a变为一个中间过度变量
b = a ^b;// b =a
a = a ^b;//a =b
作者: 1007087594    时间: 2014-5-30 08:47
路过……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2