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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐升兴 中级黑马   /  2012-10-26 22:11  /  1714 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 徐升兴 于 2012-10-28 07:23 编辑

public static void swap(int[]arr, int a, int b)
{
  arr[a]=arr[a]^arr;
  arr=arr[a]^arr;
  arr[a]=arr[a]^arr;
}
这个异或的程序是交换数组中两个元素的位置,我看了下,思路不太清晰,能不能说一下具体情况

评分

参与人数 1黑马币 +9 收起 理由
韩军博 + 9 很给力!

查看全部评分

3 个回复

倒序浏览
本帖最后由 冯海霞 于 2012-10-26 22:31 编辑


1.JPG (28.32 KB, 下载次数: 57)

1.JPG

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
2, arr[b]=arr[a]^arr[b]^arr[b].两个相同元素异或是0,任何元素和0异或是它本身,所以arr[b]=arr[a]
3,arr[a]=arr[a]^arr[a]^arr[b].和上面的解相同,所以arr[a]=arr[b]
回复 使用道具 举报
本帖最后由 王永荣 于 2012-10-26 23:04 编辑

交换两个整数常规的实现就是使用临时变量,异位运算交换两个整数不需要临时变量,其实是把临时变量与其中的一个整数结合起来了,也就是说把其中的一个整数当做临时变量来用。
交换两个整数a和b,其实就是a=b和b=a这两个操作。
a = a ^ b;
b = a ^ b; //==>b=(a^b)^b=a
a = a ^ b;// ==>a=(a^b)^a=b
原理其实和两个整数相加减来换位置是一样的。如:
a=a+b;
b=a-b;//==>b=(a+b )-b=a
a=a-b; //==>a=( a+b )-a=b  

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马