異或運算 有趣的異或運算

2021-10-16 07:38:54 字數 1471 閱讀 2628

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。

0 ^ 0 = 0

0 ^ 1 = 1

1 ^ 0 = 1

1 ^ 1 = 0

觀察運算結果我們發現,當與0做異或運算時,另一元值不變;而與1做異或運算時,另一元值值取反。

根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。

1)變數重置0

假設有乙個變數15,二進位制表示為0000 1111

0000 1111 ^ 0000 1111 = 0000 0000

a = 0000 1111

a = a ^ a

結論:同變數本身異或運算,可以將變數重置0。

2)指定位置取反

假設有乙個變數15,二進位制表示為0000 1111,將第3,4,8位取反。

0000 1111 ^ 1000 1100 = 1000 0011

結論:同指定取反位為1,其他位為0的變數進行異或運算,可以將指定位置取反。

取反後的結果,同原指定取反變數異或,可以還原變數:

1000 0011 ^ 1000 1100 = 0000 1111(15)

3)加密解密

假設有乙個變數15,二進位制表示為0000 1111,密碼子為0101 0101。

加密:0000 1111 ^ 0101 0101 = 0101 1010

加密後結果是90。

將加密後結果同密碼子異或,可以進行解密

0101 1010 ^ 0101 0101 = 0000 1111

解密後結果是15。

4)二值交換

假設兩個變數:a = 15(0000 1111), b= 23(0001 0111),將兩個變數交換。

1、a = a ^ b = 0000 1111 ^ 0001 0111 = 0001 1000

2、b = b ^ a = 0001 0111 ^ 0001 1000 = 0000 1111(15)

3、a = a ^ b = 0001 1000 ^ 0000 1111 = 0001 0111(23)

結論:二值交換實際上是利用了加密解密的特性。

1、a和b異或,可以把結果x看作是a、b互為密碼子進行加密。

2、將x,同b(原值)異或,也就是把b作為密碼子,因此可以還原a,賦值給b。

3、將x,同b(此時為a)異或,也就是把b(此時為a)作為密碼子,因此還原出的值為原b,賦值給a。交換結束。

5)判斷兩值是否相等

利用同變數本身異或運算,可以將變數重置0的特性。

假設:a = 0000 1111,b = 0000 1111,則 a ^ b == 0

假設:a = 0000 1111,b = 0000 0001,則 a ^ b != 0

結論:當兩個變數相等時,異或結果為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。將乙個運算物件的...

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

預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 運算規則 0 0 0 0 1 1 ...

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

一 與運算子 預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 二 或運算 運算規則...