異或運算 運算子 對異或運算子的認識以及初次運用

2021-10-16 07:38:54 字數 1425 閱讀 3755

1^0 = 1

相同的二進位制位相異或結果不變.

int x = 3;

int y = 4;

x = x ^ y; //x = 3 ^ 4

y = x ^ y; //y = 3 ^ 4 ^ 4 = 3

x = x ^ y; //x = 3 ^ 4 ^ 3 = 4

上述運算的結果是

x和y的值互換.

而過程中並沒有使用別的運算子.

即所說的沒有借助其它變數就實現了兩個變數的交換.

異或運算是與 & | ~並列的位運算子之一.

運算: 二進位制運算

法則: 不同為真.

1 ^ 0 = 1

當兩個數的二進位制數值相同的異或結果為0.

10

^ 111

= 101

附草稿

正如+的意義有求出兩個數的和

-的意義有求出兩個數的差

異或^也有自己的運算意義.

不妨先來看這兩組運算

int x = 3;

int y = 4;

x = x ^ y; //x = 3 ^ 4

y = x ^ y; //y = 3 ^ 4 ^ 4 = 3

x = x ^ y; //x = 3 ^ 4 ^ 3 = 4

11和100手算的異或結果可以知道, 為111(7).

111對11異或的異或結果, 為100. 答案顯然為4. 即原來數中的其中乙個

111對100異或的異或結果, 為011. 答案為3, 也是其中乙個.

而固定的運算規則對隨機的兩個數並非偶然, 由此我們可以得到結論.

拿兩個數的異或結果, 異或自己可以得到被異或的數, 異或對方可以到自己.

說起來乍一看彷彿有點模糊, 但是參照上方例子的注釋內容便清楚多了.

使用該規律, 可以實現兩個數的交換, 原地交換.

除此, 由於所有變數的位址機器上都是二進位制, 所以兩個變數, 兩個字元都可以這種方法實現兌換.

運用: 在乙個陣列中, 當左邊取鏡面對稱的兩個數, 可實現座標位上的元素交換.

現有字元陣列a ['h', 'e', 'l', 'l', 'o']

取i = 0, j = a.length - i - 1,

for(int i = 0; i < a.length/2; i++) 

return a;

這樣, 乙個字元陣列內的字元交換就孫順利多了.

在實際運算中, 善於用這個規律可以大大節省效率.

異或運算子

表示當兩個數的二進位制表示,進行異或運算時,當前位的二進位制相同為0,不同為1.表示為 特點 0異或任何數,是任何數 1異或任何數,任何數取反 任何乙個數字異或自己都等於0 面試題 乙個整型陣列中除了兩個數字之外,其他的數字都出現了兩次。試找出這兩個只出現一次的數字。劍指offer 例如,陣列 中,...

異或運算子和位運算子詳解

一.異或運算子 1.異或運算子是用符號 表示的,其運算規律是 轉換成二進位制的形式來對比每一位數,相同則結果為0,不同則結果為1。分析 a 的值是15,轉換成二進位制為 1111,而b 的值是2,轉換成二進位制為 0010,根據異或的運算規律,可以得出其結果為 1101 即最終 a b的值為13 二...

C的 異或 !運算子

1 按位與運算子 按位與運算將兩個運算分量的對應位按位遵照以下規則進行計算 0 0 0,0 1 0,1 0 0,1 1 1。即同為 1 的位,結果為 1,否則結果為 0。例如,設3的內部表示為 00000011 5的內部表示為 00000101 則3 5的結果為 00000001 2 按位或運算子 ...