1

私はこのコードを理解しようとしています。メソッドaddBittoTreeには、ブール値を渡す必要があります。何をチェックしているのかよくわかりません。currentByteと-128にアンパサンドがある理由がわかりませんが、それを加算演算子として使用していますか?

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

1 に答える 1

5

-2つのcomplemenetの128は

1000 0000

currentByteに最初のビットが設定されているとしましょう。

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

==これは( )と比較されるため、パラメータ-128を渡します。booleantrue

最初のビットが設定されていない別の例:

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

==これは( )と比較されるため、パラメータ-128を渡します。booleanfalse

この方法は常にtrueメソッドに渡されるため、最初のビットが設定されfalseている場合、および設定されていない場合、すべての正の数に最初のビットが設定されておらず、すべての負の数値に設定されていることがわかっています。単に書くのと同じです:

tree.addBitToTree(currentByte < 0);
于 2013-02-27T11:41:07.513 に答える