我想了解這一點代碼,addBittoTree方法需要一個布爾值來傳遞。我不太確定它在檢查什麼。我不明白爲什麼currentByte和-128有一個&符號,它是使用它作爲加法運算符嗎?使用按位和(與)運算符檢查單個位
byte currentByte = dis.readByte();
tree.addBitToTree((currentByte & -128) == -128);
我想了解這一點代碼,addBittoTree方法需要一個布爾值來傳遞。我不太確定它在檢查什麼。我不明白爲什麼currentByte和-128有一個&符號,它是使用它作爲加法運算符嗎?使用按位和(與)運算符檢查單個位
byte currentByte = dis.readByte();
tree.addBitToTree((currentByte & -128) == -128);
兩個的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);
從這個代碼是whnece?看起來像一個笨拙的方式來檢查'currentByte <0' – Ingo 2013-02-27 11:39:35
同意,我從來沒有看到任何人使用負數掩碼。 – Dmitry 2013-02-27 11:42:05
@Ingo我敢打賭,程序員是一名C程序員,他轉換爲Java,認爲他的惡作劇會使Java程序更快! :| – 2013-02-27 11:43:20