2012-10-25 52 views
3

對於CompSci類,我們正在審查Java Math類。作爲我的愚蠢程序員,我嘗試使用^運算符而不是Math.pow函數。驚喜,驚喜,它沒有​​工作。但是,Java吐出的是我的問題。我正試圖弄清楚正在對數字進行的操作。你可以在下面看到我在說什麼。Java和python ^運算符

System.out.println(5^1); 
System.out.println(5^2); 
System.out.println(5^3); 
System.out.println(5^4); 
System.out.println(5^5); 
System.out.println(5^6); 
System.out.println(5^7); 
System.out.println(5^8); 
System.out.println(5^9); 

運行上面,我得到如下:

4 
7 
6 
1 
0 
3 
2 
13 
12 

當我在Python相當於同樣的事情發生(print 5^1,等...)。 Java API文檔說^是一個「按位異或」,但仍然不能幫助5和3獲得6。有人可以解釋爲什麼會發生這種情況嗎?

+0

你考慮看在Java語言規範? – EJP

+2

爲什麼**地獄**是這個問題關閉了? 10個答案不足以證明實際上很容易說出「這裏被問到的是什麼」? –

+1

爲什麼你選擇在這裏問,而不是簡單地按位單獨搜索? – Overv

回答

15

這是一個按位操作,因此它操作您的數字的二進制位。 6是110的二進制形式。 5是二進制形式的101

110 
101 
=== (^ xor) 
011 

011是3的二進制。

當應用於int參數是按位異或閱讀上https://en.wikipedia.org/wiki/Exclusive_or

1

在Java中,^運營商。這解釋了輸出。爲5和3的特定情況下:

101 (5) 
011 (3) 
--- 
110 (6) 

注意,對於邏輯論證,它是邏輯異或。在這種情況下(b1^b2) == (b1 != b2)

2

這是XOR operation

5 = 101 in binary 
3 = 011 in binary 

    101 
XOR 011 
    = 110 = 6 in decimal 
1

這是因爲二進制表示五是101b,三是011b。

異或工作在方式如下:

0 xor 0 = 0 
0 xor 1 = 1 
1 xor 0 = 1 
1 xor 1 = 0 

因此: 101 XOR 011 = 110爲六的二進制表示。

3

好的,讓我們來看第一個例子。最簡單的一個。以5^1

5可以用二進制表示,如101,其中一個可以表示爲001

101 XOR 
001 
--- 
100 = 4 (in decimal) 

因爲1 XOR 1 = 00 XOR 0 = 01 XOR 0 = 1。只要去看看異或的wiki頁面。

1

希望這個小程序可以幫助解釋異或操作者更好地使用它打印的例子:

>>> for x, y in ((x, y) for x in range(11) for y in range(x, 11)): 
    print('''{0}^{1} = {2} (Why?) 
Because: 
{0:04b} = {0} 
^^^^ 
{1:04b} = {1} 
==== 
{2:04b} = {2} 
'''.format(x, y, x^y)) 


0^0 = 0 (Why?) 
Because: 
0000 = 0 
^^^^ 
0000 = 0 
==== 
0000 = 0 

0^1 = 1 (Why?) 
Because: 
0000 = 0 
^^^^ 
0001 = 1 
==== 
0001 = 1 

0^2 = 2 (Why?) 
Because: 
0000 = 0 
^^^^ 
0010 = 2 
==== 
0010 = 2 

0^3 = 3 (Why?) 
Because: 
0000 = 0 
^^^^ 
0011 = 3 
==== 
0011 = 3 

0^4 = 4 (Why?) 
Because: 
0000 = 0 
^^^^ 
0100 = 4 
==== 
0100 = 4 

0^5 = 5 (Why?) 
Because: 
0000 = 0 
^^^^ 
0101 = 5 
==== 
0101 = 5 

0^6 = 6 (Why?) 
Because: 
0000 = 0 
^^^^ 
0110 = 6 
==== 
0110 = 6 

0^7 = 7 (Why?) 
Because: 
0000 = 0 
^^^^ 
0111 = 7 
==== 
0111 = 7 

0^8 = 8 (Why?) 
Because: 
0000 = 0 
^^^^ 
1000 = 8 
==== 
1000 = 8 

0^9 = 9 (Why?) 
Because: 
0000 = 0 
^^^^ 
1001 = 9 
==== 
1001 = 9 

0^10 = 10 (Why?) 
Because: 
0000 = 0 
^^^^ 
1010 = 10 
==== 
1010 = 10 

1^1 = 0 (Why?) 
Because: 
0001 = 1 
^^^^ 
0001 = 1 
==== 
0000 = 0 

1^2 = 3 (Why?) 
Because: 
0001 = 1 
^^^^ 
0010 = 2 
==== 
0011 = 3 

1^3 = 2 (Why?) 
Because: 
0001 = 1 
^^^^ 
0011 = 3 
==== 
0010 = 2 

1^4 = 5 (Why?) 
Because: 
0001 = 1 
^^^^ 
0100 = 4 
==== 
0101 = 5 

1^5 = 4 (Why?) 
Because: 
0001 = 1 
^^^^ 
0101 = 5 
==== 
0100 = 4 

1^6 = 7 (Why?) 
Because: 
0001 = 1 
^^^^ 
0110 = 6 
==== 
0111 = 7 

1^7 = 6 (Why?) 
Because: 
0001 = 1 
^^^^ 
0111 = 7 
==== 
0110 = 6 

1^8 = 9 (Why?) 
Because: 
0001 = 1 
^^^^ 
1000 = 8 
==== 
1001 = 9 

1^9 = 8 (Why?) 
Because: 
0001 = 1 
^^^^ 
1001 = 9 
==== 
1000 = 8 

1^10 = 11 (Why?) 
Because: 
0001 = 1 
^^^^ 
1010 = 10 
==== 
1011 = 11 

2^2 = 0 (Why?) 
Because: 
0010 = 2 
^^^^ 
0010 = 2 
==== 
0000 = 0 

2^3 = 1 (Why?) 
Because: 
0010 = 2 
^^^^ 
0011 = 3 
==== 
0001 = 1 

2^4 = 6 (Why?) 
Because: 
0010 = 2 
^^^^ 
0100 = 4 
==== 
0110 = 6 

2^5 = 7 (Why?) 
Because: 
0010 = 2 
^^^^ 
0101 = 5 
==== 
0111 = 7 

2^6 = 4 (Why?) 
Because: 
0010 = 2 
^^^^ 
0110 = 6 
==== 
0100 = 4 

2^7 = 5 (Why?) 
Because: 
0010 = 2 
^^^^ 
0111 = 7 
==== 
0101 = 5 

2^8 = 10 (Why?) 
Because: 
0010 = 2 
^^^^ 
1000 = 8 
==== 
1010 = 10 

2^9 = 11 (Why?) 
Because: 
0010 = 2 
^^^^ 
1001 = 9 
==== 
1011 = 11 

2^10 = 8 (Why?) 
Because: 
0010 = 2 
^^^^ 
1010 = 10 
==== 
1000 = 8 

3^3 = 0 (Why?) 
Because: 
0011 = 3 
^^^^ 
0011 = 3 
==== 
0000 = 0 

3^4 = 7 (Why?) 
Because: 
0011 = 3 
^^^^ 
0100 = 4 
==== 
0111 = 7 

3^5 = 6 (Why?) 
Because: 
0011 = 3 
^^^^ 
0101 = 5 
==== 
0110 = 6 

3^6 = 5 (Why?) 
Because: 
0011 = 3 
^^^^ 
0110 = 6 
==== 
0101 = 5 

3^7 = 4 (Why?) 
Because: 
0011 = 3 
^^^^ 
0111 = 7 
==== 
0100 = 4 

3^8 = 11 (Why?) 
Because: 
0011 = 3 
^^^^ 
1000 = 8 
==== 
1011 = 11 

3^9 = 10 (Why?) 
Because: 
0011 = 3 
^^^^ 
1001 = 9 
==== 
1010 = 10 

3^10 = 9 (Why?) 
Because: 
0011 = 3 
^^^^ 
1010 = 10 
==== 
1001 = 9 

4^4 = 0 (Why?) 
Because: 
0100 = 4 
^^^^ 
0100 = 4 
==== 
0000 = 0 

4^5 = 1 (Why?) 
Because: 
0100 = 4 
^^^^ 
0101 = 5 
==== 
0001 = 1 

4^6 = 2 (Why?) 
Because: 
0100 = 4 
^^^^ 
0110 = 6 
==== 
0010 = 2 

4^7 = 3 (Why?) 
Because: 
0100 = 4 
^^^^ 
0111 = 7 
==== 
0011 = 3 

4^8 = 12 (Why?) 
Because: 
0100 = 4 
^^^^ 
1000 = 8 
==== 
1100 = 12 

4^9 = 13 (Why?) 
Because: 
0100 = 4 
^^^^ 
1001 = 9 
==== 
1101 = 13 

4^10 = 14 (Why?) 
Because: 
0100 = 4 
^^^^ 
1010 = 10 
==== 
1110 = 14 

5^5 = 0 (Why?) 
Because: 
0101 = 5 
^^^^ 
0101 = 5 
==== 
0000 = 0 

5^6 = 3 (Why?) 
Because: 
0101 = 5 
^^^^ 
0110 = 6 
==== 
0011 = 3 

5^7 = 2 (Why?) 
Because: 
0101 = 5 
^^^^ 
0111 = 7 
==== 
0010 = 2 

5^8 = 13 (Why?) 
Because: 
0101 = 5 
^^^^ 
1000 = 8 
==== 
1101 = 13 

5^9 = 12 (Why?) 
Because: 
0101 = 5 
^^^^ 
1001 = 9 
==== 
1100 = 12 

5^10 = 15 (Why?) 
Because: 
0101 = 5 
^^^^ 
1010 = 10 
==== 
1111 = 15 

6^6 = 0 (Why?) 
Because: 
0110 = 6 
^^^^ 
0110 = 6 
==== 
0000 = 0 

6^7 = 1 (Why?) 
Because: 
0110 = 6 
^^^^ 
0111 = 7 
==== 
0001 = 1 

6^8 = 14 (Why?) 
Because: 
0110 = 6 
^^^^ 
1000 = 8 
==== 
1110 = 14 

6^9 = 15 (Why?) 
Because: 
0110 = 6 
^^^^ 
1001 = 9 
==== 
1111 = 15 

6^10 = 12 (Why?) 
Because: 
0110 = 6 
^^^^ 
1010 = 10 
==== 
1100 = 12 

7^7 = 0 (Why?) 
Because: 
0111 = 7 
^^^^ 
0111 = 7 
==== 
0000 = 0 

7^8 = 15 (Why?) 
Because: 
0111 = 7 
^^^^ 
1000 = 8 
==== 
1111 = 15 

7^9 = 14 (Why?) 
Because: 
0111 = 7 
^^^^ 
1001 = 9 
==== 
1110 = 14 

7^10 = 13 (Why?) 
Because: 
0111 = 7 
^^^^ 
1010 = 10 
==== 
1101 = 13 

8^8 = 0 (Why?) 
Because: 
1000 = 8 
^^^^ 
1000 = 8 
==== 
0000 = 0 

8^9 = 1 (Why?) 
Because: 
1000 = 8 
^^^^ 
1001 = 9 
==== 
0001 = 1 

8^10 = 2 (Why?) 
Because: 
1000 = 8 
^^^^ 
1010 = 10 
==== 
0010 = 2 

9^9 = 0 (Why?) 
Because: 
1001 = 9 
^^^^ 
1001 = 9 
==== 
0000 = 0 

9^10 = 3 (Why?) 
Because: 
1001 = 9 
^^^^ 
1010 = 10 
==== 
0011 = 3 

10^10 = 0 (Why?) 
Because: 
1010 = 10 
^^^^ 
1010 = 10 
==== 
0000 = 0 

>>> 
+0

它不。它只是顯示了一些例子。 – EJP

+0

人們相當擅長識別模式(即語言)。一個規則應該很容易從這些例子中派生出來。 –