1

HashMap.java で次のコードを見ました。

    h ^= k.hashCode();
    // This function ensures that hashCodes that differ only by
    // constant multiples at each bit position have a bounded
    // number of collisions (approximately 8 at default load factor).
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);

いくつかのランダムな入力は加算に似た出力を生成しましたが、次のコードは 0 になりました

   int p = 10;
    p ^= 10;
    System.out.println("_______ " + p);
4

5 に答える 5

4

^=演算子は、左側の変数とオペランドで XOR を実行し、結果のその変数への代入を実行します。

それ自体で何かをXORすると、ゼロになります。メモリを移動しないため、レジスタをゼロに設定する効率的な方法です。

于 2013-10-12T21:47:09.550 に答える
1

^XOR (排他的論理和または排他的論理和)として知られている論理演算子は、次のとおりです。

1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0

次と p^=10同等です。

p = p ^ 10; or,  p = p xor 10

p = 10あなたの操作は単純です: , (10 ^ 10)、結果は次のようになります0

于 2013-10-12T21:47:14.157 に答える