私はこのコードを持っています、それは「2」になります。私はグーグルで本を検索しましたが、私を助ける良い答えは見つかりませんでした。
int i = 2;
int j = 3;
int x = i & j;
System.out.println (x);
誰でも説明できますか。
ここで、「&」はビット単位の演算子です。ビットは、両方のオペランドに設定されている場合にのみ結果に設定されます。
操作は次のとおりです。
2: 00000010
& 3: 00000011
-----------
2: 00000010
もちろん、ここでは、intは32ビットであり、最後の8つだけを示しましたが、とにかく最初の24はこれらの数値のすべてゼロです。
これはビット演算子です。
2進数の2は「10」です。2進数の3は「11」です。ビットごとの&演算子は、次のようにそれらを比較します。
10
&11
--
10
両方の数値が1である各列に対して、1が返されます。この場合、結果は「10」になります。これは、intとして2に等しくなります。
&はビットごとのAND
であり、&&は論理ANDです。
2&3は正しく2を配信します。
バイナリ表現で表現:
10
11
--
10
&
次のように機能するビット演算子です。
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
したがって2 & 3 = 2
:
2 ==> 00000000000000000000000000000010
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 ==> 00000000000000000000000000000011
---------
2 ==> 00000000000000000000000000000010
これらの例を見てください:
System.out.println(2 & 3);
System.out.println(3 & 4);
System.out.println(8 & 4);
System.out.println(9 & 5);
System.out.println(11 & 7);
// binary representation of above operations
System.out.println(0b10 & 0b11);
System.out.println(0b11 & 0b100);
System.out.println(0b1000 & 0b100);
System.out.println(0b1001 & 0b101);
System.out.println(0b1011 & 0b111);
その結果、次の出力が得られます。
2
0
0
1
3
2
0
0
1
3
次に、戻って2進表現を見て、結果の回答が数値のビットごとのANDであることに注意してください(論理積ではありません&&)