我试图理解这段代码,方法addBittoTree需要传递一个布尔值。我不太清楚它在检查什么。我不明白为什么currentByte和-128有&符号,是否使用它作为加法运算符?
byte currentByte = dis.readByte();
tree.addBitToTree( (currentByte & -128) == -128 );
答案 0 :(得分:5)
-128 in two's complemenet是
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