编程技巧:使用异或操作符(XOR)交换两数值
生活随笔
收集整理的這篇文章主要介紹了
编程技巧:使用异或操作符(XOR)交换两数值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
異或(exclusive OR)作為4種邏輯操作符之一,相對其他3種(OR/AND/NOT)來說,出場的次數(shù)非常少,是因為在日常開發(fā)中能用到它的場景本來就不多。對筆者來說,目前接觸到場景只有交換兩個數(shù)值時才會用到。
?
Java Code:
1 int a = 5; 2 int b = 95; 3 System.out.println(a + ", " + b); 4 5 a ^= b;//等價于 a = a ^ b; 6 b ^= a; 7 a ^= b; 8 System.out.println(a + ", " + b); 9 10 /* 11 * output: 12 * 5, 95 13 * 95, 5 14 */?
具體例子:冒泡排序
1 public static int[] bubbleSort(int[] input){ 2 for(int i = input.length - 1; i > 0; i--){ 3 for(int j = 0; j < i; j++){ 4 if(input[j] > input[j + 1]){ 5 input[j] ^= input[j + 1]; 6 input[j + 1] ^= input[j]; 7 input[j] ^= input[j + 1]; 8 } 9 } 10 } 11 return input; 12 }?
注意:
?
使用場景:
對筆者來說,使用該寫法的場景只有一個:筆試時的算法題目。這是從避免潛在的不必要的溝通問題方面來考慮。
?
原理:
邏輯操作符的本質(zhì)就是對兩個二進制數(shù),在單個位級別(bit)的操作。在Java中,由于其他3種已經(jīng)用于對boolean進行運算,所以剩下異或可以用于位運算。
舉最簡單的例子來說明,對于兩個1bit的二進制數(shù)A和B、及它們的異或運算結果C(0或1)來說,在得知任何兩個數(shù)(AB/AC/BC)的情況下,最后一個數(shù)是明確的。
所以
1 a ^= b;// a=a^b 得出c,并賦值給a,即此時a=c; 2 b ^= a;// b=a^b 由于此時a=c,所以實際上是c^b得到a,并賦值給b; 3 a ^= b;// a=a^b 此時b=a,a=c 所以實際上是a^c得到b,并賦值給a,完成a與b的交換?
轉載于:https://www.cnblogs.com/lawrencechen/p/4858511.html
總結
以上是生活随笔為你收集整理的编程技巧:使用异或操作符(XOR)交换两数值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net视频摘要
- 下一篇: 实验一DOS报告