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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-7 20:03  /  1632 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨华东 于 2012-10-7 20:05 编辑
  1. public class Test6 {
  2. /*交换同类型数据的最高效率方式如下。
  3. ** */
  4. public static void main(String[] args) {
  5. int a = 0;
  6. int b = 8;
  7. a=a^b; //谁能给我说的透彻,给你申请技术分啊。
  8. b=a^b;
  9. a=a^b;
  10. System.out.println(a+" "+b);
  11. }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
a^b^b = a

这个你懂吗?

评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1

查看全部评分

回复 使用道具 举报
首先这确实是最有效率的方式
因这使用的是位运算
^总结出来的特性是 一个数被另一个数异或两次,它的结果还是它本身( 我们可以利用这个 来写一个低级加密程序哦)
例如
3^2的结果为 1            (二进制 :11^10==1)
1再异或2结果为3         (二进制 :1^10 == 11)
也就是说
a^b^b==a
剩下的就不用解释了吧- -+
加分!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
a=a^b; //1式
b=a^b;//把a用上式右边代替,即是:b=a^b^b  ,就是把最初的a赋给b
a=a^b;//把1式右边代替a,,b已经是最初的a值了,,,所以等价于用最初的值表示: a=a^b^a,  就是b值

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class Test6 {

/*交换同类型数据的最高效率方式如下。

** */

public static void main(String[] args) {

int a = 0;

int b = 8;

a=a^b; //将a的值与b的值调换另一种方法就是利用逻辑运算符:^。规律:一个数亦或另一个数两次,结果还为那个数。注意:如果两个数非常大可能会超出int范围。

b=a^b;//b=(a^b)^b

a=a^b;//a=a^(a^b)

System.out.println(a+" "+b);

}

}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡高德 发表于 2012-10-7 20:18
public class Test6 {

/*交换同类型数据的最高效率方式如下。

那个 不好意思 ,关于两个非常大的数异或是不会会超出int的范围的.
因为a和b都是int值,只要这两个值都是相同类型,那就不会超出范围
例如 a和b值都是int值的上限,那他们两个异或的值为0,再次异或a或者b它的值还是int的上限,永远不会超出
你说的那个是普通的算术运算符的交换吧?搞混了
回复 使用道具 举报
同意楼上
回复 使用道具 举报
相同输出0,不同输出1,例如:
System.out.println(1^1); 输出0
System.out.println(1^2);输出3,因为最后2个低位都不一样,所有输出3 。
比如2^1=3,二进制就是:0010^0001=0011
如果两个数值异或后的值相同,异或前可能不同。  
例如0^3=3,二进制就是:0000^0011=0011。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
补充下:
a=a^b;  
b=a^b;  //b = (a^b)^b =a
a=a^b; // a = a^(a^b) = b

懂否?
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马