日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编程技巧:使用异或操作符(XOR)交换两数值

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程技巧:使用异或操作符(XOR)交换两数值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異或(exclusive OR)作為4種邏輯操作符之一,相對其他3種(OR/AND/NOT)來說,出場的次數非常少,是因為在日常開發中能用到它的場景本來就不多。對筆者來說,目前接觸到場景只有交換兩個數值時才會用到。

?

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 }

?

注意:

  • 任何數與0進行異或計算,結果為其自身;
  • 任何數與自己進行異或計算,結果為0;
  • Java中僅能對byte, short, int或long這4種整數類型(帶正負號)進行異或運算,其他類型包括char都不允許(編譯錯誤);
  • 第1和第2點Java中不用擔心,因為Java中對兩個整形變量的異或運算并不是進行數值上的計算,而是對變量的內存地址的交換,因此不存在這兩個問題。
  • ?

    使用場景:

    對筆者來說,使用該寫法的場景只有一個:筆試時的算法題目。這是從避免潛在的不必要的溝通問題方面來考慮。

    ?

    原理:

    邏輯操作符的本質就是對兩個二進制數,在單個位級別(bit)的操作。在Java中,由于其他3種已經用于對boolean進行運算,所以剩下異或可以用于位運算。

    舉最簡單的例子來說明,對于兩個1bit的二進制數A和B、及它們的異或運算結果C(0或1)來說,在得知任何兩個數(AB/AC/BC)的情況下,最后一個數是明確的。

    所以

    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)交换两数值的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。