ビットの論理演算 | Javaで泣くほど悩む新人プログラマーのブログ

Javaで泣くほど悩む新人プログラマーのブログ

若くして涙腺が弱くなったプログラマーの退屈な日常を抜け出す為の奮闘記

メルマガ「一から始めるJava言語」の中でビット論理演算に
ついて説明をするのでまとめてみました。

ビット論理演算とは?
パソコンで扱う情報はすべてビットと呼ばれる情報で扱われます。

数値も例えば10であればパソコンの中では1010という情報で
扱われます。

1010といのはそれぞれ1ビットの値の組み合わせです。
つまり1010は4ビットの情報を持っているのです。

ビット論理演算とはそのビットごとの計算を行うことです。

普通に10*5をすると50になりますが、ビット論理積をすると、
10&5は0になります。

不思議ですね。
では、説明を始めます。

まずは、「&(論理積)」から始めます。
ビットごとの計算とはつまり1ビットずつの計算です。

10*5であれば1010と101を1ビットずつかけ算します。
つまり、

  1010
& 0101
-----------


こういう計算を行います。

論理積はかけ算なので、簡単です。
上のビットも下のビットも1の時だけ計算結果が1になります。

上も下も1になっているビットがないので全て
0になります。

  1010
& 0101
-----------
  0000


では、10と2の論理積と計算してみましょう。
10は1010で2は0010です。

  1010
& 0010
------------
  0010


下から2ビット目だけが上も下も1になっているので「0010」が
答えになります。

次は「|(論理和)」です。

論理積は、「上と下両方が1のビットが1」になりましたが、論理和は
上と下どちらかが1のビットが1」になります。

では、先ほどの10と5を論理和で計算してみましょう。

  1010
| 0101
------------
  1111


どちらかが1になっているビットが4ビット全てなので答えは
全部1になります。


次は、「^(排他的論理和)」です。
言葉が難しいですね…。
これは、前の二つに比べてひねくれてます…。

どうひねくれているのかというと、「上と下が違うときだけ1」になります。

今度は10(1010)と11(1011)で排他的論理和をしてみます。

1010
^ 1011
-----------
  0001

と、なります。

上と下のビットの値が異なるのが最下位ビットのみなので答えは
「0001」となります。

どうですか?
なんとなく論理演算を分かってもらえましたか?

論理演算を視覚的に分かりやすく表現したベン図というものが
ありますので、そちらもよかったら見て下さい。
ベン図について