Java中的異或
阿新 • • 發佈:2018-11-10
主要內容轉自: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