異或運算(^)都以二進制數(shù)據(jù)為基礎(chǔ)進行的運算。也就是說當(dāng)代碼中使用到異或運算時,都會先將兩個條件進行轉(zhuǎn)換,轉(zhuǎn)換成二進制數(shù)據(jù)后,再進行運算。異域中同位如果值相同(都是0或者都是1)則為0,不同(一個是0,一個是1)為1。
目前創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、新區(qū)網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
例如
int a=4;
int b=6;
int c = a^b;//c的值是a和b的異或。值為2.
過程
1、a的值二進制是
0000 0100 //這里去低8位,因為高位都一致。
2、b的值二進制是
0000 0110
3、異或后
0000 0010 //結(jié)果是2
private?String?twoStringXor(String?str1,?String?str2)?{
byte?b1[]?=?str1.getBytes();
byte?b2[]?=?str2.getBytes();
byte?longbytes[],shortbytes[];
if(b1.length=b2.length){
longbytes?=?b1;
shortbytes?=?b2;
}else{
longbytes?=?b2;
shortbytes?=?b1;
}
byte?xorstr[]?=?new?byte[longbytes.length];
int?i?=?0;
for?(;?i??shortbytes.length;?i++)?{
xorstr[i]?=?(byte)(shortbytes[i]^longbytes[i]);
}
for?(;ilongbytes.length;i++){
xorstr[i]?=?longbytes[i];
}
return?new?String(xorstr);
}
int 32位,補碼存儲
int?a?=?51;
int?b?=?-16;
System.out.println("51??="?+?Integer.toBinaryString(a));
System.out.println("-16?="?+?Integer.toBinaryString(b));
int?c?=?a^b;
System.out.println("異或????="?+?Integer.toBinaryString(c));
System.out.println("即????????="?+?c);
51 ?=110011
-16 =11111111111111111111111111110000
異或 ? ?=11111111111111111111111111000011
原碼為1000。。。111101
即 ? ? ? ?=-61
java和c的執(zhí)行是不一致的
相同之處:i ^= (j ^= (i ^= j)); java和C都是這個執(zhí)行順序;
不同之處:
java:執(zhí)行完第一個(i ^= j)的時候,最左邊的i的值還是1而不會是(i ^= j)的值
C:執(zhí)行完第一個(i ^= j)的時候,最左邊(第一個)i的值是(i ^= j)
你的程序改成這樣就可以了:
j ^= i ^= j;
i ^= j;
或
i =i^j;
j=i^j;
i=i^j;
概述
i = 14,異或算法轉(zhuǎn)換二進制,同則取0異則取1;
解析
異或是一種基于二進制的位運算,用符號XOR或者^表示,其運算法則是對運算符兩側(cè)數(shù)的每一個進制位同值則取0,異值則取1.
簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.
For example:
3^5 = 6
轉(zhuǎn)成二進制后就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6
而 i = 50 ,j = 60;
所以:
i 的二進制 = 00110010
j 的二進制 = 00111100
同位相同取0,不同取1所以得出來的值為00001110
i = i ^ j;所以i = 00001110 = 14
拓展內(nèi)容
異或運算符
性質(zhì)
1、交換律?
2、結(jié)合律(即(a^b)^c == a^(b^c))?
3、對于任何數(shù)x,都有x^x=0,x^0=x?
4、自反性 A XOR B XOR B = A xor 0 = A
異或運算最常見于多項式除法,不過它最重要的性質(zhì)還是自反性:A XOR B XOR B = A,即對給定的數(shù)A,用同樣的運算因子(B)作兩次異或運算后仍得到A本身。這是一個神奇的性質(zhì),利用這個性質(zhì),可以獲得許多有趣的應(yīng)用。 例如,所有的程序教科書都會向初學(xué)者指出,要交換兩個變量的值,必須要引入一個中間變量。但如果使用異或,就可以節(jié)約一個變量的存儲空間: 設(shè)有A,B兩個變量,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :?
A=A XOR B (a XOR b)?
B=B XOR A (b XOR a XOR b = a)?
A=A XOR B (a XOR b XOR a = b)
#code:
google面試題的變形:一個數(shù)組存放若干整數(shù),一個數(shù)出現(xiàn)奇數(shù)次,其余數(shù)均出現(xiàn)偶數(shù)次,找出這個出現(xiàn)奇數(shù)次的數(shù)?
網(wǎng)站題目:java代碼怎么寫異或,java字符串異或
標題來源:http://chinadenli.net/article16/heeogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、App開發(fā)、網(wǎng)站設(shè)計、軟件開發(fā)、品牌網(wǎng)站設(shè)計、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)