今天再次撿起java基礎(chǔ),以前在校的時(shí)候很少用到取反操作。

TulipFestival_ZH-CN8467334837_1920x1080.jpg
當(dāng)然和在學(xué)校劃水有關(guān),今天看到異或位運(yùn)算符,^是異或,相同為0,不同為1,例如int x = 19^20,
19:0001 0011
20:0001 0100
可以看到二進(jìn)制進(jìn)行異或,答案是0000 0111,也就是x=7,那么在實(shí)際編寫(xiě)代碼中有什么用呢?例如下面:
a ^ a = 0;
a ^ 0 = a;
a ^ b = b ^ a;
a ^ b ^ b = a;
假如兩個(gè)數(shù)交換,最大眾的寫(xiě)法是
int a=4,b=3;
int temp = a;
a = b;
b = temp
寫(xiě)法2:
a = a + b;
b = a - b;
a = a - b;
寫(xiě)法3:
a = a ^ b; // a = 4 ^ 3, b=3;
b = a ^ b; // a = 4 ^ 3, b = 4 ^ 3 ^ 3 = 4
a = a ^ b; // a = 4 ^ 3 ^ 4 = 3, b = 4;
寫(xiě)法4:
a = (a + b) - (b = a); //或者下面這種
a = (a ^ b) ^ (b = a);
以上寫(xiě)法都是實(shí)現(xiàn)兩者的交換,在工作中第一種大眾容易被別人理解,方法2是利用減法是加法的逆運(yùn)算,方法3是利用異或操作 推薦面試或者筆試用第三種,當(dāng)然第四種也可以。異或還可以在一堆數(shù)中找相同的,時(shí)間復(fù)雜度最小,空間復(fù)雜度也最小,因?yàn)槭嵌M(jìn)制位運(yùn)算,開(kāi)銷(xiāo)最小。目前想到的就這些,以后學(xué)習(xí)到了新的 會(huì)再補(bǔ)充。