異或運算詳解

2021-07-30 05:23:32 字數 1519 閱讀 3462

按位異或操作(^)規則:如果兩個運算物件的對應位置有且只有乙個為1,則計算結果中該位位1,否則為0。

簡言之:兩個相同的數會變成0,反之是1。

0 ^ 0 =0

0 ^ 1 = 1

1 ^ 1 = 0

1 ^ 0 = 1

使用異或的例子,如leetcode上有一道題目single number,題目描述如下:

題目大意就是在給定陣列中找出哪個數字是單身狗:(。

解題思想:

(2^1^4^5^2^4^1) =>

((2^2)^(1^1)^(4^4)^(5)) =>

(0^0^0^5) =>

5

**如下:

int singlenumber(vector

& nums)

通過按位異或運算,還可以實現兩個值的交換,而不必使用臨時變數。例如交換兩個整數a,b的值,可通過下列語句實現:

a = 10100001, b = 00000110

;a = a ^ b;   //a=10100111,記錄兩者的差異

b = b ^ a;   //b=10100001

a = a ^ b;   //a=00000110

此外,異或運算可以實現兩個整數的相加(其實也是leetcode上的一道題目 sum of two integers):

int getsum(int a, int b)
優先順序方面,異或運算不高不低:比算數運算子低,但比關係運算子/邏輯運算子/賦值運算子高。

結合律方面,滿足左結合律。

乙個數的《和》運算相當於乘以或除以2的n次冪。例如:

3 << 2 = 3 * (2**2) = 12。3 >> 2 = 3 / (2**2) = 0(記住,是整除)

除此之外,異或運算還有以下用處:

* 比較兩個數字。a ^ b == 0;

* 使某些特定的位翻**

unsigned int a, b, mask = 1 << 6;

a = 0xb1; // 10100001

b = a ^ mask; /* flip the 6th bit */

* 判斷乙個二進位制數中1的數量是奇數還是偶數,求10100001中1的數量是奇數還是偶數,答案:

1 ^ 0 ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 = 1
* 互換二進位制數的奇偶位:

//假設 int 佔兩個位元組,16位;

#include

#include

using

namespace

std;

#define n(n) ((n<<1)&(0xaaaa))|((n>>1)&(0x5555))

void main()

異或運算操作詳解

異或,是乙個數 算符,英文為exclusive or,縮寫為xor,應用於邏輯運算。異或的數學符號為 計算機符號為 xor 其運算法則為 a b a b a b 如果a b兩個值不相同,則異或結果為1。如果a b兩個值相同,異或結果為0。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進...

異或運算 有趣的異或運算

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...

(與運算) (或運算) (異或運算)

即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...