1. 程式人生 > >Java中的異或

Java中的異或

主要內容轉自: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<a.length;i++) { 
            result^=a[i]; 
        } 
        return result; 
	} 
 
 
}

輸出結果:

^:0
lost:8