コンテンツにスキップ

論理演算

論理演算

Javaでもビット単位のAND演算、OR演算、XOR演算、シフト演算を行うことが出来ます。

AND演算

AND演算は両方とも1なら1、それ以外は0になります。 AND演算は & 演算子で行います。

int num = 5 & 7;

この場合、

5 = 0101
7 = 0111

のAND演算を行うので

0101

となり、10進数で5になります。

OR演算

OR演算は片方が1なら1、それ以外は0になります。 OR演算は | 演算子で行います。

int num = 5 | 7;

この場合、二進数で

5 = 0101
7 = 0111

のOR演算を行うので

0111

となり、10進数で7になります。

XOR演算

XOR演算は同じなら0、違うなら1になります。 XOR演算は ^ 演算子で行います。

int num = 5 ^ 7;

この場合、二進数で

5 = 0101
7 = 0111

のXOR演算を行うので

0010

となり、10進数で2になります。

左シフト演算

Javaでの左シフト演算は << で行います。

int num = 5 << 1;

この場合、

5 = 0101

の1ビット左シフトを行うので

1010

となり、10進数で10になります。

右シフト演算

Javaでの右シフト演算は >> で行います。

int num = 7 >> 1;

この場合、

7 = 0111

の1ビット右シフトを行いので

0011

となり、10進数で3になります。

負の数の場合、補数表現で算術右シフトを行います。例えば、-2の場合、

1111 1111 1111 1111 1111 1111 1111 1110

になるので、これを算術右シフトを行うと

1111 1111 1111 1111 1111 1111 1111 1111

となり、10進数で-1になります。

※算術右シフトの場合、先頭ビットはそのままであり、その値がそのまま右に入ります。

なお、演算子 >>> を使うと符号無しの単純な右シフト(論理右シフト)になります。