1. 程式人生 > >C++異或運算子及作用

C++異或運算子及作用

簡略記憶:同0異1 1.由於0^0=0 0^1=1 所以,0^任何數 = 任何數 2.由於1^0=1 1^1 =0所以,1^任何數 = 任何數取反 3.任何數^任何數 = 0; 4.用於將特定的位反轉,如對10100001的第2位和第3位翻轉,可以將數與00000110進行按位異或運算。原因見(2) 5.通過按位異或運算,可以實現兩個值的交換,而不必使用臨時變數。 例如 a= 10100001  b= 00000111 a=a^b; //a=10100110 //此步操作是將a b原值的相同位記錄為0,不同位記錄為1. //並儲存在a中,b值此步並沒有發生變化簡略記憶:同0異1
1.由於0^0=0 0^1=1 所以,0^任何數 = 任何數
2.由於1^0=1 1^1 =0所以,1^任何數 = 任何數取反
3.任何數^任何數 = 0;
4.用於將特定的位反轉,如對10100001的第2位和第3位翻轉,可以將數與00000110進行按位異或運算。原因見(2)
5.通過按位異或運算,可以實現兩個值的交換,而不必使用臨時變數。
例如 a= 10100001 
b= 00000111
a=a^b; //a=10100110
//此步操作是將a b原值的相同位記錄為0,不同位記錄為1.
//並儲存在a中,b值此步並沒有發生變化
//由於1^任何數 = 任何數取反 0^任何數 = 任何數
b=b^a; //b=10100001
//a中用1表示原值中對應位不同的部分
//做異或操作是將b中與(原a)中相同的部分保留,與(原a)中不同的部分取反
//即將b程式設計原來的a
a=a^b //a=00000111
//由於此時的a表示異同,b表示原來的a
//同理第二部步可獲得原b值,賦給a即可實現轉換
6.異或運算的特點:a兩次異或同一個數b(a=a^b^b)仍然為原值a。//參考(5)即可知。
7.異或是可交換的:a^b = b^a //由於1^任何數 = 任何數取反 0^任何數 = 任何數 b=b^a; //b=10100001 //a中用1表示原值中對應位不同的部分 //做異或操作是將b中與(原a)中相同的部分保留,與(原a)中不同的部分取反 //即將b程式設計原來的a a=a^b //a=00000111 //由於此時的a表示異同,b表示原來的a //同理第二部步可獲得原b值,賦給a即可實現轉換 6.異或運算的特點:a兩次異或同一個數b(a=a^b^b)仍然為原值a。//參考(5)即可知。 7.異或是可交換的:a^b = b^a