本文目錄一覽:
java異或運算
java和c的執行是不一致的
相同之處:i ^= (j ^= (i ^= j)); java和C都是這個執行順序;
不同之處:
java:執行完第一個(i ^= j)的時候,最左邊的i的值還是1而不會是(i ^= j)的值
C:執行完第一個(i ^= j)的時候,最左邊(第一個)i的值是(i ^= j)
你的程序改成這樣就可以了:
j ^= i ^= j;
i ^= j;
或
i =i^j;
j=i^j;
i=i^j;
java怎樣用異或進行
異或運算(^)都以二進制數據為基礎進行的運算。也就是說當代碼中使用到異或運算時,都會先將兩個條件進行轉換,轉換成二進制數據後,再進行運算。異域中同位如果值相同(都是0或者都是1)則為0,不同(一個是0,一個是1)為1。
例如
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 //結果是2
java異或運算符求詳細過程
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中異或是怎樣算的
概述
i = 14,異或算法轉換二進制,同則取0異則取1;
解析
異或是一種基於二進制的位運算,用符號XOR或者^表示,其運算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.
簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.
For example:
3^5 = 6
轉成二進制後就是 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
拓展內容
異或運算符
性質
1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A
異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變量的值,必須要引入一個中間變量。但如果使用異或,就可以節約一個變量的存儲空間: 設有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面試題的變形:一個數組存放若干整數,一個數出現奇數次,其餘數均出現偶數次,找出這個出現奇數次的數?
java中的(或運算,異或運算,與運算)解釋下
java中或運算、異或運算、與運算的使用實例和解釋如下:
public class Test { public static void main(String[] args) {
// 1、左移( )
// 0000 0000 0000 0000 0000 0000 0000 0101 然後左移2位後,低位補0:
// // 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進制為20 System.out.println(5 2);// 運行結果是20
// 2、右移( ) 高位補符號位
// 0000 0000 0000 0000 0000 0000 0000 0101 然後右移2位,高位補0:
// 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(5 2);// 運行結果是1
// 3、無符號右移( ) 高位補0
// 例如 -5換算成二進制後為:0101 取反加1為1011
// 1111 1111 1111 1111 1111 1111 1111 1011 /
/ 我們分別對5進行右移3位、 -5進行右移3位和無符號右移3位:
System.out.println(5 3);// 結果是0
System.out.println(-5 3);// 結果是-1
System.out.println(-5 3);// 結果是536870911
// 4、位與( )
// 位與:第一個操作數的的第n位於第二個操作數的第n位如果都是1,那麼結果的第n為也為1,否則為0
System.out.println(5 3);// 結果為1
System.out.println(4 1);// 結果為0
// 5、位或( | )
// 第一個操作數的的第n位於第二個操作數的第n位 只要有一個是1,那麼結果的第n為也為1,否則為0
System.out.println(5 | 3);// 結果為7
// 6、位異或( ^ )
// 第一個操作數的的第n位於第二個操作數的第n位 相反,那麼結果的第n為也為1,否則為0
System.out.println(5 ^ 3);//結果為6
// 7、位非( ~ ) // 操作數的第n位為1,那麼結果的第n位為0,反之。 System.out.println(~5);// 結果為-6 } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/155336.html