主要内容转自:https://blog.csdn.net/wangnanwlw/article/details/52606936
在java程序里面的异或用法:
相同输出0,例如:
System.out.println(1^1); 输出0
System.out.println(1^2);输出3,因为最后2个低位都不一样,所有输出3
异域的概念是相同为0不同为1.如果两个数值异或后的值相同,异或前可能不同。
比如二进制:0010^0001=0011 而0000^0011=0011。 异或要慎用。
一道有意思的题目:很多成对出现数字保存在磁盘文件中,注意成对的数字不一定是相邻的,如2, 5,3, 4, 7,3, 4, 2,5……,由于意外有一个数字消失了,如何尽快的找到是哪个数字消失了?
由于有一个数字消失了,那必定有一个数只出现一次而且其它数字都出现了偶数次。用搜索来做就没必要了,利用异或运算的两个特性——
1.自己与自己异或结果为0,
2.异或满足 交换律。a^b=b^a,即异或满足交换律。
public class Test {
public static void main(String[] args) {
System.out.println("^:" + (3^3) );
int[] arr = {2,4,6,5,8,2,5,6,4};
System.out.println("lost:" + findLost(arr));
}
public static int findLost(int a[]){
int result=0;
for(int i=0;i
输出结果:
^:0
lost:8