不用額變數,利用位運算互動兩個數

2021-10-11 21:19:56 字數 1413 閱讀 1718

/**

* @author zengfeiyang

* @date: 2020-12-11 16:57

* @description 不用額變數,利用位運算互動兩個數

* * 異或運算

* 異或運算又叫無進製相加,相同為0,不同為1

* 舉例:

* a: 0 0 1 1 1 = 7

* b: 0 1 1 0 1 = 13

* ----------------------

* a^b 0 1 0 1 0 = 10

* * 異或運算特性:

* n ^ n = 0,乙個數與自身異或,結果為零

* 0 ^ n = n,乙個數與零異或,結果為自身

* 多個數字異或運算符合交換律和結合律

* * 注意:這兩個變數的值可以相同,但必須指向不同的記憶體區域;

* 不然,指向完本例互動,會將變數指向的值刷為0

* */

public

class

swaptwonum

; system.out.

println

(arr[0]

);system.out.

println

(arr[1]

);swap

(arr,0,

1); system.out.

println

(arr[0]

);system.out.

println

(arr[1]

);system.out.

println

("********************=");

// 注意:i 和 j 都指向了陣列第0下標位置,交換後,被刷為0值了

int[

] temp =

;int i =0;

int j =0;

swap

(temp,i,j)

; system.out.

println

(temp[i]

+" , "

+ temp[j]);

}public

static

void

swap

(int

arr,

int i,

int j)

}

列印結果如下:

8

20208==

====

====

====

*****==

235352

====

====

====

====

*****0

,0

不用臨時變數交換兩個數的值

就地交換兩個數是比較經典而且基礎的演算法之一。我們要交換兩個數字,通常的做法就建立乙個中間變數,然後進行迴圈賦值,比如說下面的 void switch int p1,int p2 這種做法是最常見的一種交換兩個數字的方法,但研究演算法的人總是會提出比較詭異的問題,比如說在手持裝置中,記憶體資源很寶貴...

不用臨時變數交換兩個數的值

就地交換兩個數是比較經典而且基礎的演算法之一。我們要交換兩個數字,通常的做法就建立乙個中間變數,然後進行迴圈賦值,比如說下面的 void switch int p1,int p2 這種做法是最常見的一種交換兩個數字的方法,但研究演算法的人總是會提出比較詭異的問題,比如說在手持裝置中,記憶體資源很寶貴...

不用中間變數交換兩個數的值

當要交換兩個數的值時,通常的做法是定義乙個臨時變數,然後再進行交換。那麼能不能不用臨時變數而交換兩個數的值呢?可以的!c語言提供的異或運算就可以實現這樣的操作。異或運算子 也稱xor運算子,它的規則是若參加運算的兩個二進位同號,則結果為0 假 異號為1 真 即0 0 0,0 1 1,1 0 1,1 ...