黑马程序员技术交流社区

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

作者: igi9009    时间: 2014-4-23 16:31
标题: 关于^位运算符的一些运用问题
  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????

作者: 迈特凯    时间: 2014-4-23 16:56
这是过程,第3部代错了

QQ截图20140423165539.png (3.03 KB, 下载次数: 26)

QQ截图20140423165539.png

作者: 悠然丶    时间: 2014-4-23 16:57
给你提供另外一种思路,可能好理解点.
public static void main(String[] args) {
                int x =4;int y=2;
                x =y+ (y=x) -x;  //一句代码搞定  + - 是从前往后依次执行的,
                System.out.println("x="+x);
                System.out.println("y="+ y);

        }
作者: 孙旌棋    时间: 2014-4-23 16:57
本帖最后由 孙旌棋 于 2014-4-23 16:59 编辑

同学, 跟你讲个结论吧, 你先记住总是好的, 一个数 ^ 同一个数两次, 结果是不会变的

例如: 7 ^ 4 ^ 4 = 7  

那么这里
              x = x ^ y;  // x = 4 ^ 2
              y = x ^ y;  // y = (4 ^2 ) ^2 = 4
              x = x ^ y;  // x = (4 ^ 2) ^ 4 = 2

你问的这个问题, 代码我已经给你注释过了

给你提个小建议, 你的代码格式实在是不敢恭维, 平时写代码的时候要注意一下哦

  1. class Demo {

  2.         public static void main(String args[])

  3.         {

  4.                 int x = 4;
  5.                 int y = 2;

  6.                 x = x ^ y; // x = 4 ^ 2

  7.                 y = x ^ y; // y = (4 ^2 ) ^2 = 4

  8.                 x = x ^ y; // x = (4 ^ 2) ^ 4 = 2

  9.                 System.out.println("y=" + y + "," + "x=" + x);

  10.         }

  11. }
复制代码



作者: 한숨짓다    时间: 2014-4-23 23:02

TestDemo.PNG (113.9 KB, 下载次数: 35)

TestDemo.PNG

作者: taulinxinny    时间: 2014-4-23 23:30
第三步x=x^y 相当于(x^y)^x,可以把右边的x放到左边,就等于x^(x^y),根据你写的“思路”得出x=y。而你的想法之所以不对,因为你的第二步中y已经
作者: 心?=忐§忑]    时间: 2014-4-23 23:32
本帖最后由 心?=忐§忑] 于 2014-4-23 23:33 编辑

看一下运算过程:

无标题.png (33.47 KB, 下载次数: 26)

无标题.png

作者: taulinxinny    时间: 2014-4-23 23:36
第三步x=x^y 相当于(x^y)^x,可以把右边的x放到左边,就等于x^(x^y),根据你写的“思路”得出x=y。而你的想法之所以不对,因为你的第二步中y已经被赋值成x,为啥第三步中的y还是x^y呢?即使要这么写,但你的x在第一步已经被赋值为x^y了,所以y=(x^y)^y=x




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