Java中"與"、"或"、"非"、"異或"
& 按位"與"運算子
public class Demo { public static void main(String[] args) { // &運算子 int a = 16; //16轉換為二進位制為10000 int b = 17; //17轉換為二進位制為10001 // 兩個運算元都為1時才為1 // 10000 // & 10001 //-------------- // 10000 System.out.println(a&b); //輸出為16 } }
| 按位"或"運算子
public class Demo { public static void main(String[] args) { // |運算子 int a = 16; //16轉換為二進位制為10000 int b = 17; //17轉換為二進位制為10001 // 兩個運算元只要有一個1就為1 // 10000 // | 10001 //-------------- // 10001 System.out.println(a|b); //輸出為17 } }
~ "取反"運算子
public class Demo { public static void main(String[] args) { // ^運算子 int a = 8; int b = 9; //8轉換為二進位制為1000 //9轉換為二進位制為1001 // 異或規則相同為0不同為1 // 1000 // | 1001 //-------------- // 0001 System.out.println(a^b); //輸出為1 } }
假如有一個陣列中有兩個相同的內容只有一個是不一樣的,那麼如何找到這個不一樣的數。
可能我敘述的不太容易理解,假如我們有以下陣列。
int temp = {1,2,3,4,5,4,3,2,1};
可以看到陣列中的1、2、3、4都是有兩個,但是隻有5有一個,而我們要做的就是找到這個5。
如何用十分簡潔的程式碼就可以實現這個功能呢?
這裡使用了一個異或的特性。
public class Demo { public static void main(String[] args) { int[] temp = {1,2,5,2,1,4,4,15,5}; int a = 0; for(int i=0;i<temp.length;i++) { a = a ^ temp[i]; } System.out.println(a); } }
執行這段程式碼。
C:\Users\PiLiPaLa\Desktop\Code\Eight>java Demo 15
成功的將15輸出了。
其實原理就是異或,有兩個相同的數就會抵消變成0,然後只剩下單獨的那一個。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983372/viewspace-2731107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異或
- 異或門
- 一分鐘搞懂邏輯運算子&(並且) , |(或者) , !(非) , ^(異或) , &&(短路與) , ||(短路或)之間的關係
- 異或與區間加題解
- 最大異或對
- 【ctf】異或注入
- 分組異或
- 異或雜湊
- 非 A 或 B 等價於非 A 且非 B
- 位運算-異或(^)
- 異或線性基
- 異或 1 的妙處
- 遊戲異或加解密遊戲解密
- 異或運算 XOR 教程
- P4551 最長異或路徑(樹上字首異或01-trie)
- JavaScript ^ 按位異或運算子JavaScript
- 異或線性基小記
- python系列--計算異或和Python
- 子陣列異或和問題陣列
- 雙子串最大異或 題解
- 【讀書1】【2017】MATLAB與深度學習——異或問題(1)Matlab深度學習
- 異或交換兩個數的值
- 深入理解按位異或運算子
- P4551 最長異或路徑
- 複習(二):KMP、Trie、最大異或對、KMP
- NC275631 嚶嚶不想求異或
- 【Java資料結構與演算法】簡單排序、二分查詢和異或運算Java資料結構演算法排序
- 演算法之字首樹——最大異或和演算法
- 子陣列的最大異或和問題陣列
- 羽夏殼世界——異或加密的實現加密
- 關於樹上路徑異或和的思考
- Java值物件或DTO克隆工具Java物件
- Java 已老,Kotlin 或將取而代之?JavaKotlin
- 使用libtorch訓練一個異或邏輯閘
- 洛谷-P2420 讓我們異或吧
- bzoj5301: [Cqoi2018]異或序列(莫隊)
- JAVA字串轉日期或日期轉字串Java字串
- 如何在 macOS Monterey 或更早版本中隱藏或顯示Dock欄Mac