1. ビット&
演算子
すべてのデータはバイナリ表現でメモリに保存されると前述しました。そのため、かなり昔、プログラマーは 2 進数を扱うための興味深い方法をたくさん考え出しました。たとえば、Java には、数値のバイナリ表現のビットを操作する論理演算子&
(AND)、| (OR)
、~
(NOT または補数)、および^
(XOR - 排他的論理和) があります。
a & b
&
(AND) 演算子
この演算子は論理&
(AND) 演算子によく似ていますが、2 つではなく 1 つのアンパサンドで表される点が異なります。
そしてそれは個々のビットに適用されます。各オペランドはビットの配列として扱われ、i
結果の 番目のビットはi
2 つのオペランドのそれぞれの 番目のビットを使用して計算されます。
a
結果の最初のビットは、数値の最初のビットと数値の最初のビットに基づいて計算され、2 番目のビットはb
数値の 2 番目のビットa
と数値の 2 番目のビットに基づいて計算されますb
。
(AND)演算子&
は、「数値の対応するビットが 1 に等しく、数値の対応するビットがa
1 に等しい場合にのみAND
、結果のビットb
が 1 に等しい」ことを意味します。
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
例:
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
2. ビット|
演算子
この演算子は論理|
(OR) 演算子とよく似ていますが、2 本の垂直線ではなく 1 本の垂直線で示される点が異なります。
a | b
そしてそれは個々のビットに適用されます。各オペランドはビットの配列として扱われ、結果の i 番目のビットは 2 つのオペランドのそれぞれの i 番目のビットを使用して計算されます。
ビット単位|
(OR) 演算子は、「数値の対応するビットが 1 に等しい場合、数値の対応するビットa
が 1 に等しい場合、結果のビットは 1 に等しい」ことを意味します。OR
b
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
例:
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
両方の数値の対応するビット (同じ位置にあるビット) が 0 の場合にのみ、結果の対応するビットが 0 に等しくなります。
3. ビット単位^
(XOR または「排他的論理和」) 演算子
演算子はXOR
、排他的論理和とも発音され、 という記号で示されます^
。キーボードで入力するには、shift + 6を押します(英語キーボード レイアウトの場合)。
a ^ b
この演算子は、OR
名前が似ているという点も含めて、次の演算子に似ています。XOR
ビット単位^
(XOR) 演算子は、「数値の対応するビットが 1 に等しい場合、結果のビットはa
1 に等しくOR
、数値の対応するビットがb
1 に等しい場合は、両方が同時に等しいわけではない」ことを意味します。
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
例:
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
両方の数値の対応するビット (同じ位置にあるビット) が異なる場合にのみ、結果の対応するビットが1 に等しくなります。ビットが同じ場合、結果のビットはゼロになります。
4. ビット単位~
(NOT、COMPLEMENT) 演算子
それが何をするかはすでに推測できると思います。この演算子は論理 (NOT) 演算子とよく似ていますが、感嘆符ではなくチルダ!
で示されます。
~a
これは単項演算子であり、2 つの数値ではなく 1 つの数値に適用されることを意味します。この単一のオペランドの前に表示されます。
ビット~
演算子は、「数値の対応するビットが 0 の場合、結果のビットはa
1 であり、数値の対応するビットが 1 の場合、結果のビットは 0 であるa
」ことを意味します。
~1 = 0
~0 = 1
例:
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
1
この演算子は、になるビット0
と になるビットを0
単純に変更します1
。
GO TO FULL VERSION