&
私はいくつかのコード例を読んでいて、Oracle の Web サイトの Bitwise and Bit Shift Operators ページに出くわしました。私の意見では、 bitwise を説明する仕事はあまりうまくいきませんでした&
。ビットに対して直接操作を行うことは理解していますが、どのような操作なのかわからず、その操作が何なのか疑問に思っています。以下は、Oracle の Web サイトから入手したサンプル プログラムです。例/BitDemo.java
8 に答える
整数は、メモリ内の一連のビットとして表されます。人間と対話するために、コンピューターはそれを 10 進数で表示する必要がありますが、すべての計算は 2 進数で実行されます。123
10 進数1111011
でメモリに格納されます。
演算子はビットごとの&
「And」です。結果は、両方の数値でオンになっているビットです。1001 & 1100 = 1000
両方で最初のビットのみがオンになるためです。
演算子はビットごとの|
「Or」です。結果は、いずれかの数値でオンになっているビットです。1001 | 1100 = 1101
、どちらも右から 2 番目のビットだけが 0 であるためです。
また、それぞれビットごとの「Xor」とビットごとの「Not」である^
and演算子もあります。~
最後に<<
、>>
および>>>
シフト演算子があります。
フードの下には、システムに応じて、または123
いずれかとして格納されます。どちらの表現も論理値として扱われるため、どちらの表現が使用されるかは問題ではありません。先頭のゼロを取り除くと、 が残ります。01111011 00000000 00000000 00000000
00000000 00000000 00000000 01111011
00000000000000000000000001111011
1111011
これは二項 AND 演算子です。これは、コンピューティングの 2 進数で一般的に使用されるブール論理の一部である AND 演算を実行します。
例えば:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
複数ビットの数値でもこれを実行できます。
01 & 00 = 00
11 & 00 = 00
11 & 01 = 01
1111 & 0101 = 0101
11111111 & 01101101 = 01101101
...
16 進コードに従って 2 つの変数を展開すると、次のようになります。
bitmask : 0000 0000 0000 1111
val: 0010 0010 0010 0010
ここで、単純なビット単位の AND 演算の結果、数値が得られ0000 0000 0000 0010
ます。これは 10 進単位で 2 です。ただし、基本的なブール演算と数値システムについて知っていることを前提としています。
入力値に対する論理演算です。理解するために、値をバイナリ形式に変換し、位置 n のボット ビットが 1 の場合、結果は 1 になります。最後に元に戻します。
たとえば、これらの値の例を使用すると、次のようになります。
0x2222 = 10001000100010
0x000F = 00000000001111
result = 00000000000010 => 0x0002 or just 2