ビット演算子
このページでは、Javaで用意されている&
|
などのビット演算子について説明します。
ビット演算子
Javaでは以下のビット演算子が用意されています。ビット演算子は整数型の値に使用します。&
|
^
をブール型の値に使用した場合は条件演算子として機能します。
演算子 | 記入例 | 説明 |
---|---|---|
& | x & y | x、yが整数型の場合、ビットごとのAND演算を行う。 |
| | x | y | x、yが整数型の場合、ビットごとのOR演算を行う。 |
^ | x ^ y | x、yが整数型の場合、ビットごとのXOR演算を行う。 |
~ | ~x | xが整数型の場合、ビットごとのNOT演算(各ビットの反転)を行う。 |
&の説明
&
はビット演算子におけるAND演算を意味します。AND演算(論理積)は演算するビットが両方とも1であった場合に1を返す演算方法です。
xのビット | yのビット | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
2進数1000(10進数8)と2進数1010(10進数10)のAND演算は2進数1000(10進数8)です。
| の説明
|
はビット演算におけるOR演算を意味します。OR演算(論理和)は演算するビットの片方が1であった場合に1を返す演算方法です。
xのビット | yのビット | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
2進数1000(10進数8)と2進数1010(10進数10)のOR演算は2進数1010(10進数10)です。
^の説明
^
はビット演算におけるXOR演算を意味します。XOR演算(排他的論理和)は演算するビットが異なっていた場合に1を返す演算方法です。
xのビット | yのビット | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
2進数1000(10進数8)と2進数1010(10進数10)のXOR演算は2進数0010(10進数2)です。
~の説明
~
はビット演算におけるNOT演算を意味します。NOT演算は演算する各ビットの反転を行う演算方法です。2進数00001000(10進数8)のNOTは11110111(10進数-9)です。
ビット演算はメモリ領域を節約する目的で複数のブール型の代わりに使われる場合があります。その使用例を以下に示します。
【例】1ビット演算をブール型の代わりに使用する例です。
public class ExOperator11 {
//(1)各定数に判定値の設置
static final int AGE = 1;
static final int ADDRESS = 2;
static final int SEX = 4;
static final int OTHERS = 8;
public static void main(String[] args) {
int judge = 0; //(2)
//(3)判定元変数と判定値のOR演算
judge = judge | AGE;
judge = judge | ADDRESS;
if ((judge & AGE) == AGE) { //(4)
if ((judge & ADDRESS) == ADDRESS) {
System.out.println("Your age and address is OK"); //(5)
} else {
System.out.println("Your address is NG");
}
} else {
System.out.println("Your age is NG");
}
}
}
解説1
- (1)判定の元となる変数に値を設定するため各定数に判定値の設定を行います。判定値は各ビットで重ならないよう2を累乗した値にします。
- (2)判定の元となる変数の設定を行います。値0はすべての条件においてfalseであることを表します。
- (3)判定元変数と判定値のOR演算を行います。演算後、判定元変数judgeには判定値の値が設定されています。
- (4)判定元変数と判定値のAND演算を行います。判定元変数に判定値の値が設定されていればAND演算結果は判定値の値と同じになります。
- (5)判定元変数にAGE、ADDRESSの両方の値が設定されている時に「Your age and address is OK」が表示されます。
実行結果1
D:\JAVA>javac ExOperator11.java
D:\JAVA>java ExOperator11
Your age and address is OK
D:\JAVA>
5ビット演算子