黑马程序员技术交流社区

标题: 问一个关于用异或交换位置的问题 [打印本页]

作者: 徐升兴    时间: 2012-10-26 22:11
标题: 问一个关于用异或交换位置的问题
本帖最后由 徐升兴 于 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;
}
这个异或的程序是交换数组中两个元素的位置,我看了下,思路不太清晰,能不能说一下具体情况

作者: 打工人    时间: 2012-10-26 22:29
本帖最后由 冯海霞 于 2012-10-26 22:31 编辑


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

1.JPG

作者: 李靖    时间: 2012-10-26 22:49
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:02
本帖最后由 王永荣 于 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  






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