絕對基本的Java問題,我很難在Google上找到它。什麼以下平均:Java中的邏輯表示法
(7 & 8) == 0?
相當於是對於寫作:
7 == 0 || 8 == 0?
我寫了一個快速主其測試這一點,這似乎是這樣。我只是想確保我沒有失去任何東西。
絕對基本的Java問題,我很難在Google上找到它。什麼以下平均:Java中的邏輯表示法
(7 & 8) == 0?
相當於是對於寫作:
7 == 0 || 8 == 0?
我寫了一個快速主其測試這一點,這似乎是這樣。我只是想確保我沒有失去任何東西。
沒有。 &
是bitwise and。如果在兩個輸入中都設置了相應的位,它會設置一些。由於在二進制中,7是111
而8是1000
,它們沒有共同的位,所以結果是0
。
對於你所建議的事情,沒有任何簡寫語法,而不是單一行。有幾個解決方法 - 測試Set
或BitSet
的會員資格,使用switch
聲明 - 但沒有什麼效率和簡短,只有7 == 0 || 8 == 0
。
這是比較,工作正常,因爲你比較7和8,不保證與其他情況。如果整數中的兩個位都匹配,您將得到的結果爲'1'而不是'0'。
&
是按位與。鑑於輸入兩位,下面給出了按位輸出位和:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
在這種情況下,
7 in binary is 00000111
8 in binary is 00001000
--------
00000000, which is 0 in decimal.
假設你有26個而不是8
7 in binary is 00000111
26 in binary is 00011010
--------
00000010, which is 2 in decimal.
按位操作用於提取和處理打包成數字的字段。例如,假設您有3個字段打包成一個數字,其中兩個4位(0..15),1位和3位(0..7)。
// n = aaaabbbbccc
// Unpack the fields:
a = (n >> 7) & 0xF;
b = (n >> 3) & 0xF;
c = (n >> 0) & 0x7;
// Pack the fields:
n = (a << 7)
| (b << 3)
| (c << 0);
&是一個位比較,如所提到的,也可以作爲一個短路「和」。例如:
if((x == 3) && (y = 3/0)){
會一直拋出錯誤。但是,如果x等於3.如果x不等於3,JAVA不會打擾評估表達式的休息,因爲假&什麼將是假
if((x == 3) & (y = 3/0)){
將只拋出一個錯誤。