2012-02-08 30 views
7

絕對基本的Java問題,我很難在Google上找到它。什麼以下平均:Java中的邏輯表示法

(7 & 8) == 0? 

相當於是對於寫作:

7 == 0 || 8 == 0? 

我寫了一個快速主其測試這一點,這似乎是這樣。我只是想確保我沒有失去任何東西。

回答

17

沒有。 &bitwise and。如果在兩個輸入中都設置了相應的位,它會設置一些。由於在二進制中,7是111而8是1000,它們沒有共同的位,所以結果是0

對於你所建議的事情,沒有任何簡寫語法,而不是單一行。有幾個解決方法 - 測試SetBitSet的會員資格,使用switch聲明 - 但沒有什麼效率和簡短,只有7 == 0 || 8 == 0

3

這是比較,工作正常,因爲你比較7和8,不保證與其他情況。如果整數中的兩個位都匹配,您將得到的結果爲'1'而不是'0'。

4

&是一個按位運算符。這意味着,你是取與代表8和第7位:

7 - >0111

8 - >1000

這顯然導致0

wikipedia article與解釋得很好你的確切例子以及解釋其他按位運算符。

10

&是按位與。鑑於輸入兩位,下面給出了按位輸出位和:

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); 
3

&是一個位比較,如所提到的,也可以作爲一個短路「和」。例如:

if((x == 3) && (y = 3/0)){ 

會一直拋出錯誤。但是,如果x等於3.如果x不等於3,JAVA不會打擾評估表達式的休息,因爲假&什麼將是假

if((x == 3) & (y = 3/0)){ 

將只拋出一個錯誤。