[英]Java and python ^ operator
對於CompSci類,我們正在查看Java Math類。 作為我的愚蠢程序員,我嘗試使用^運算符而不是Math.pow函數。 驚喜,驚喜,它沒有用。 但是,Java吐出的是我的問題。 我試圖弄清楚正在使用數字進行的操作。 你可以在下面看到我在說什么。
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如何。有人可以解釋為什么會發生這種情況嗎?
這是一個按位運算,因此它對數字的二進制位進行操作。 6是110
二進制形式。 5是二進制形式的101
。
110
101
=== (^ xor)
011
011
是二進制3。
好的,讓我們來看第一個例子。 最簡單的一個。 拿5^1
。
圖5中所示的數字可以用二進制表示,如圖101
並且可以用001
表示一個。
101 XOR
001
---
100 = 4 (in decimal)
因為1 XOR 1 = 0
0 XOR 0 = 0
且1 XOR 0 = 1
。 只需去看看XOR上的維基頁面。
這是XOR操作 。
5 = 101 in binary
3 = 011 in binary
101
XOR 011
= 110 = 6 in decimal
在Java中,應用於int
參數的^
運算符是按位異或。 這解釋了輸出。 對於5和3的特定情況:
101 (5)
011 (3)
---
110 (6)
請注意,對於邏輯參數,它是邏輯異或。 在那種情況下(b1 ^ b2) == (b1 != b2)
。
^
是BitWise XOR運算符。 所以,
5 ^ 1: -
101 -> 5
001 -> 1
--- XOR
100 = 4
1 XOR 1 = 0
1 XOR 0 = 1
看到這些鏈接: -
^
是按位XOR運算 ,它的真值表如下所示:
| 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
因此,僅當輸入不同時輸出位為1
,否則為0
。 所以5 ^ 3
看起來像這樣:
0000 0101 (5)
^ 0000 0011 (3)
= 0000 0110 (6)
所以它正在做它應該做的事情。 查看用於按位運算的Nuts and Bolts教程以及此SO問題以獲取更多參考資料。
這是因為五位的二進制表示是101b,三位是011b。
Xor的工作方式如下:
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
因此:101 xor 011 = 110即6的二進制表示。
希望這個小程序有助於使用它打印的示例更好地解釋獨占或運算符:
>>> 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
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.