2013-02-27 32 views
1

我想了解這一點代碼,addBittoTree方法需要一個布爾值來傳遞。我不太確定它在檢查什麼。我不明白爲什麼currentByte和-128有一個&符號,它是使用它作爲加法運算符嗎?使用按位和(與)運算符檢查單個位

byte currentByte = dis.readByte(); 
tree.addBitToTree((currentByte & -128) == -128); 
+5

從這個代碼是whnece?看起來像一個笨拙的方式來檢查'currentByte <0' – Ingo 2013-02-27 11:39:35

+0

同意,我從來沒有看到任何人使用負數掩碼。 – Dmitry 2013-02-27 11:42:05

+1

@Ingo我敢打賭,程序員是一名C程序員,他轉換爲Java,認爲他的惡作劇會使Java程序更快! :| – 2013-02-27 11:43:20

回答

5

兩個的complemenet -128是

1000 0000

假設你的currentByte具有第一位集:

1000 0000 // -128 
     &  // bitwise logical and 
    1010 1010 // currentByte (example) 
is 
    1000 0000 // -128 

即比較(==)到-128,所以你正通過boolean參數true

其中第一位未設置又如:

1000 0000 // -128 
     &  // bitwise logical and 
    0011 1110 // currentByte (example) 
is 
    0000 0000 // 0 

即比較(==)至-128,所以要傳遞的boolean參數false

因爲這樣做的這種方式總是通過true的方法,當第一位被設置,並且false,如果沒有設置它,我們知道,所有的正數不具有第一位設爲所有負面的做,它等於簡單地寫:

tree.addBitToTree(currentByte < 0); 
+0

你應該解釋'&'是邏輯的'和',我不認爲提問者明白這一點。 – Joe 2013-02-27 11:41:53

+0

@Joe:做到了...... – jlordo 2013-02-27 11:45:43

+0

我覺得我現在明白了,非常感謝,正是我需要知道的:) – 2013-02-27 11:47:29