異或運算可以看做是沒有進製的加法,按位異或運算,相同為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 二 或運算 運算規則...