算術演算子TweetPocketJavaではハードウェアを制御することがあり、ビットの値を計算したいという時がある。Web系だと使わないが、徐々にIoTが広がっている現状、使う機会も多くなっていくはずだ。このページではJavaでのビット演算子の使い方をまとめてみた。サンプルプログラムの説明Javaでのビット演算子の使い方Javaのビット演算子は、そのままだが「ビットの演算を行う演算子」だ。ビットの演算とは、数値をビット単位で演算することを指す。ビットの値を演算子のオペランドに与えて論理積や論理和などの演算を行い、結果を数値として生み出す。この演算子がよく使われるひとつの分野は、ハードウエアを制御する分野だ。32ビットの数値あり、そのひとつひとつのビットがスイッチの状態に対応しているとする。最下位のビットから数えて4番目のビットだけを抜き出して、スイッチの状態を調べたい。こんなとき、このビット演算子が使える。Webアプリケーションなどではなかなか登場しないが、こういうものがあると知っておくのはJavaエンジニアとしていいことだろう。演算子の種類から見ていこう。演算子の種類ビット演算子には、4つの種類がある。次のセクションでこれらのひとつひとつの演算子の詳細を説明している。~これらの演算子は、整数のビットの並びの同じ位置にあるビット同士を演算する。この例は、&演算子の演算の様子を例として示している。10101次は、ビット演算子の詳細だ。演算子それぞれに書き方ある。その詳細を見てみよう。&演算子「&」は整数のビットの論理積を求める。&演算子の左と右にあるオペランドのビットごとに演算が行われる。書き方の基本は簡単だ。オペランド2;数値を構成するひとつのビットに注目すると、論理積の演算結果は次のようになる。オペランド1とオペランド2のビットが両方とも1ならば、演算結果は1となる。値オペランド11100オペランド21010演算結果100016ビットの数値をオペランドに持つ場合の演算結果は、次の表のようになる。この表は、演算がどのような結果になるかを示している。各ビットに注目すると上のひとつのビットに注目した表のとおりに演算しているのが分かる。|演算子「|」は整数のビットの論理和を求める。|演算子の左と右にあるふたつのオペランドのビットごとに演算が行われる。書き方の基本は簡単だ。オペランド2;数値を構成するひとつのビットに注目すると論理和の演算結果は次のようになる。オペランド1とオペランド2のビットのどちらか1ならば、演算結果は1となる。値オペランド11100オペランド21010演算結果111016ビットの数値をオペランドに持つ場合の演算結果は次のようになる。^演算子「^」は整数のビットの排他論理和を求める。^演算子の左と右にあるふたつのオペランドのビットごとに演算が行われる。書き方の基本は簡単だ。オペランド2;数値を構成するひとつのビットに注目すると排他論理和の演算結果は次のようになる。オペランド1とオペランド2のビットの値が異なれば、演算結果は1となる。値オペランド11100オペランド21010演算結果011016ビットの数値をオペランドに持つ場合の演算結果は次のようになる。~演算子「~」は整数のビットの補数を求める。~演算子の左のあるオペランドのビットに対して演算が行われる。書き方の基本は簡単だ。~オペランド;数値を構成するひとつのビットに注目すると補数の演算結果は次のようになる。オペランドのビットが1ならば、演算結果は0となる。オペランドのビットが0ならば、演算結果は1となる。値オペランド10演算結果0116ビットの数値をオペランドに持つ場合の演算結果は次のようになる。表現16進数2進数オペランド10xff000b1111_1111_0000_0000演算結果0x00ff0b000_0000_1111_1111ビット演算子のサンプルプログラムこのサンプルプログラムは、前のセクションで例としてあげた16ビットのそれぞれの演算をそのままプログラムに書いたものだ。実際のコードで書き方と演算結果を確かめよう。0x0ffff00ffサンプルプログラムの説明それでは簡単にプログラムの解説をしてゆこう。value1を宣言し、0xff00を代入する。value2を宣言し、0xf0f0を代入する。resultを宣言する。value2を代入する。resultを表示する。value2を代入する。resultを表示する。value2を代入する。resultを表示する。valueに~value1を代入する。resultを表示する。ビットの値を取り出すサンプルプログラムこのサンプルプログラムは、冒頭で書いたスイッチの状態を取り出す課題の回答となる。最下位ビットから4番目のビットにスイッチが繋がっていて、スイッチをONするとビットの値が1になり、OFFすると0になる。このプログラムでは、この4番目のビットの値だけ取り出すために&演算子を使っている。Bitで4番目のビットだけを1にしておけば、そのビットの変化だけを取り出せる。他のビットは、すべて0になる。0サンプルプログラムの説明それでは簡単にプログラムの解説をしてゆこう。switchStatusOffを宣言し、0b0000_0000_0000_0000_0000を代入する。switchStatusOnを宣言し、0b0000_0000_0000_0000_1000を代入する。switchNumber4MaskBitを宣言し、0b0000_0000_0000_0000_1000を代入する。switchStatusを宣言する。switchNumber4MaskBitを代入する。switchStatusを表示する。switchNumber4MaskBitを代入する。switchStatusを表示する。まとめこのページではbit演算子についてまとめてきた。Javaは組みこみ系プログラミングでも動くため、こういったbit演算子も豊富に用意されている。はじめはとっつきにくいかもしれないが、それほど難しくはないので、マスターしてしまおう。TweetPocketこのページの続きや関連ページは下記から一覧で確認できる。・「プログラマーとして転職をしたい!」という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。エンジニアの入り口に立つために必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報が詰まっています。無料で2,3日中にお手元にお届けします。資料を見てみるSNSでもご購読できます。IT研修専門企業のリナックスアカデミーです。】エンジニアの入り口に立つために役立つようなコンテンツを日々ご提供していきます。講師や代表やスタッフ陣が毎日楽しく書いています。ご質問・ご指摘等はぜひコメントください。*メールアドレス(公開はされません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報を無料でお届け資料を見てみる。