論理演算
論理演算
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になります。
※算術右シフトの場合、先頭ビットはそのままであり、その値がそのまま右に入ります。
なお、演算子 >>> を使うと符号無しの単純な右シフト(論理右シフト)になります。