A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 华行天下 中级黑马   /  2013-7-27 11:07  /  1294 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-28 09:35 编辑

java变量置换怎么用异或解决?

评分

参与人数 1黑马币 +5 收起 理由
杜光 + 5 毕老师视频中 又讲到。。哦

查看全部评分

4 个回复

倒序浏览
a=a^b;
b=a^b;
a=a^b;
自己亲手操作下就知道了
回复 使用道具 举报
假设需要置换的变量为m和n,则使用双异或置换的方法为:
m = m^n;  
n = m^n;  
m = m^n;

代码解析:
应用位运算中的异或的特点:同一个数异或两次相同的数等于原来的数。
因为m = m^n,则n = m= (m^n)^n ,m=n=m^n^(m)。
希望对你有帮助。{:soso_e141:}
回复 使用道具 举报
原理:一个数异或同一个数两次,结果还是那个数
n=n^m
m=n^m//(n^m)^m
n=n^m//n^(n^m)
就是这样喵
回复 使用道具 举报
关于
JAVA
中交换变量的方法

  
在我们写程序的时候,经常会遇到两个变量A与B交换的操作,通常大家会借
助第三个变量来实现:
  
  

  
第一种方法利用第三个变量:
  
如:
C=A;A=B;B=C;  

  
第二种方法是利用加减法实现两个变量的交换:
  
如:
A=A+B;B=A-B;A=A-B;  

  
第三种方法是得用位异或运算来实现,
也是效率最高的一种,
在大量数据
交换的时候,效率明显优于前两种方法,
  
如:
A=A^B;B=A^B;A=A^B;   
原理:利用一个数异或本身等于0和异或运算符合交换率。
  
下面看看执行效率
  
Java
代码
   
package com.ramon.test;
  
public class Test {  
    public static void main(String args[]) {
        int A = 2;
        int B = 3;
        int C;  
        
System.out.println("Object creating…");

        System.out.println("A=" + A);
        System.out.println("B=" + B);  
        System.out.println("==================");
        
System.out.println("Method 1 starting…");

        Long
begin
=System.nanoTime();
        C = A;
        A = B;
        B = C;  
        System.out.println("A=" + A);
        System.out.println("B=" + B);
        Long
end
=System.nanoTime();  
        System.out.println("Start Time: "+begin);
        System.out.println("End Time: "+end);  
自考Java语言快速入门Java 语言基础Java 语言概述        System.out.println("Last Time: "+(end-begin));
        System.out.println("==================");
        
System.out.println("Method 2 starting…");

        begin=System.nanoTime();
        A = A + B;
        B = A

B;
        A = A

B;  
        System.out.println("A=" + A);
        System.out.println("B=" + B);
        end=System.nanoTime();  
        System.out.println("Start Time: "+begin);
        System.out.println("End Time: "+end);  
        System.out.println("Last Time: "+(end-begin));
        System.out.println("==================");
        
System.out.println("Method 3 starting…");

        begin=System.nanoTime();
        A = A ^ B;
        B = A ^ B;
        A = A ^ B;  
        System.out.println("A=" + A);
        System.out.println("B=" + B);
        end=System.nanoTime();  
        System.out.println("Start Time: "+begin);
        System.out.println("End Time: "+end);  
        System.out.println("Last Time: "+(end-begin));
        System.out.println("==================");
    }
}
   
运行结果:
   
Object creating…

A=2
B=3  
==================
Method 1 starting…

A=3
B=2  
Start Time: 7022865296008
End Time: 7022865590179
Last Time: 294171
==================
Method 2 starting…

A=2  
B=3  
Start Time: 7022866909621
End Time: 7022867035335
Last Time: 125714
==================
Method 3 starting…

A=3
B=2  
Start Time: 7022867374764
End Time: 7022867490700
Last Time: 115936
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马