論理演算子とビット演算子
Javaでふとこんなコードを見た。
if(condition1 | condition2){ //... }
えーと、あーと、あれ、
| と || & と &&
って何が違うんだったっけ?
。。。
脳が劣化してきたのだろうか。。。やばい。ということでメモ。
- ||や&&は論理演算子。条件のAND、ORに使います。
- |や&はビット演算子。ビット演算のAND、ORに使います。
- 上の2つの違いは、その名のとおり、条件(boolean)の結合に使うか、演算に使うかという違いです。ビット演算はbooleanの他に整数で利用します(例 int a = 1<<1 & 1<<2)。
- if文の条件には動作上はどちらを書いてもほぼ同じですが、意味的には、if文に書くのは普通、論理演算子の方(|| &&)です。
- また論理演算子では、処理の効率化のため、先の条件のチェックによって、後ろの条件のチェックが不要な場合には、チェックされません(例えば、confition1 && conditon2 でconditon1がfalaseならcondition2に関わらずfalseなのでcondition2は読み込まれない)。一方ビット演算子は、演算のためのものなので、こういう処理の省略はありません。
- 普通のプログラマーがよく利用するのは論理演算子だと思うんですが、利用頻度の少ないビット演算子の方が「一文字少ないのでタイピングが楽」なのは、世の中そういうもんです。
- 演算子の優先順序的には、論理演算子 > 条件演算子 です。でもまぁ、並べて書くとわけわからんことになるので、()で普通囲むでしょう。