java 的位运算符中有一个叫异或的运算符,用符号(^)表示,其运算规则是:两个操作数的位中,相同则结果为 0,不同则结果为 1。下面看一个例子:
public class TestXOR{
public static void main(String[] args)
{
int i = 15, j = 2;
System.out.println("i ^ j = " + (i ^ j));
}
}
运行结果是:i ^ j = 13.
分析上面程序,i=15 转成二进制是 1111,j=2 转成二进制是 0010,根据异或的运算规则得到的是 1101,转成十进制就是 13.
利用这个规则我们可以灵活运用到某些算法。比如,假定有 2K+1 个数,其中有 2k 个相同,需要找出不相同的那个数,比如:2、3、4、4、3、5、6、6、5。我们利用异或运算符就可以这样写:
public class TestXOR{
public static void main(String[] args)
{
int[] array = {2,3,4,4,3,5,6,6,5};
int v = 0;
for (int i = 0;i < array.length;i++) {
v ^= array[i];
}
System.out.println("只出现一次的数是:" + v);
}
}
结果是:只出现一次的数是 2.
我们就是巧用异或运算符的规则,得出一个数和 0 异或还是自己,一个数和自己异或是 0 的原理。
原文地址:
http://blog.csdn.net/renjie_998003/article/details/50738025不理解 for 循环出来的为什么是只出现一次的数字
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/407000
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.