使用按位和(&符号)运算符检查单个位

时间:2013-02-27 11:36:39

标签: java bit-manipulation

我试图理解这段代码,方法addBittoTree需要传递一个布尔值。我不太清楚它在检查什么。我不明白为什么currentByte和-128有&符号,是否使用它作为加法运算符?

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

1 个答案:

答案 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