第26章 操作符之異或(1 / 1)

“^”,操作符異或。   在進行一些操作時,經常需要交換兩個數,而交換兩個數最簡單的方法是引入第三個數。   例如:   定義一個a,定義一個b,交換a和b隻需要定義一個c,讓c等於a,b等於a,a等於c,就完成了一個賦值上的交換。   而在一些情況時,不允許引入第三個數,有一個方法是,直接對a和b進行加減,從而達到交換的作業。   例如:   a =a + b;   //注意,下麵的b就相當於a,因為a+b-b   b =a - b;   //注意,下麵式子中,a是a+b,整體就是a=a+b-a(上個注釋解釋了原因。)   a =a - b;   但這個用計算達到交換目的的方法有個缺點,那就是這樣交換,int的a和b會有最大值,如果超出了最大值,就會溢出。   一刻也沒有為計算達成交換目的有缺點而感到悲傷,下麵登場的是異或“^”符號。   a = a ^ b;   b = a ^ b;   a = a ^ b;   這一係列操作就可以吧a和b進行交換。   原理:   異或是將a和b兩個數字的補碼進同0,異1的計算。組成一個新的碼,再將這個碼給給變成原碼(如果為正,那麼原反補碼都一樣,如果為負,那麼反碼是補碼-1,原碼是反碼除首位數字外,1變0,0變1)。   經過計算,如果熟練之後會發現   7^7=0,0^7=7,7^7^7=7,   那麼   a = a ^ b;   b = a ^ b;   //這個式子等同於b=a^b^b,結果為a,所以b=a   a = a ^ b;   //這個式子等同於a=a^b^a,結果為b,所以a=b   我趣,真神奇,真有意思,好玩,太妙了