0

私は次のようなコードを見ていました:

public int someMethod(String path, int maxCallers) {

        int hash = path.hashCode();
        int caller = (hash & Integer.MAX_VALUE) % maxCallers;
        return caller;
    }

このメソッドは、パスに基づいて呼び出される呼び出し元を返します。maxCallers値が 4 の場合、呼び出し元の値は 0 から 3 の間である必要があります。ここで、doing の使用法がわかりませんhash & Integer.MAX_VALUE。私が考えることができる1つの理由は、ハッシュコードが負になる可能性があるため、プログラマーが正の数を望んでいるということですが、私の理解はここで間違っていると思います. ここでビットごとの AND 演算子の使用について説明してください。

4

1 に答える 1

0

あなたの仮定は正しいです。ハッシュが負の場合に備えて、整数の符号を削除します。ANDwith するとInteger.MAX_VALUE、整数から符号ビットが削除されます。これは、整数の絶対値を取得することとは異なることに注意してください。

int hash = -1;
int caller = (hash & Integer.MAX_VALUE) % 4;  // returns 3

int hash = -1;
int caller = Math.abs(hash) % 4;  // returns 1
于 2015-01-24T10:03:00.980 に答える