ビット演算子[&演算子とは]

こんにちは、この記事は6月に行われる。Java能力認定試験を受験する。
筆者による筆者のための備忘録です。またこの記事をもとに誰かの役に立てたらうれしいと思います。


ビット演算子とは。

言葉の通り。数値をビット単位で演算するときに用いられる。


そのため、ハードウェア寄りの話になるため、普通にUnityなどでプログラムをしているとまず出会わないであろう演算子だ。


筆者も高校時代にハードウェアの授業を通じてこの論理和や、論理積を学んだが、結局使いどころは余り分からなかった。

しかし今回は検定に合格するためしっかり覚えて合格に備えよう。


ビット演算子の種類

ビット演算子には

上記の4つの種類が存在する。



まず最初に今回紹介するのが、

演算子

&という記号からわかる通り。AND演算(論理積)は演算するオペランドが両方とも
1の時に結果として1を返す演算子です。
f:id:hiromunomymail:20200301071231p:plain
上記の表の通り結果が1になるのは左のオペランドAと右のオペランドBが1のときのみである。

それでは実際にプログラムを記述してみよう。

ビット演算子を用い、1を表示するプログラム。
 public class Main {
              public static void main(String[] args) {
               int a=1&1;
               System.out.println(a);
     }
}

上記の結果として、当たり前ですが1=1&1なので1が表示されましたね。

皆さんもお使いの環境で、コードをコピペして実行してみてください。

次に同じく&演算子を用いて、2進数や16進数でも同じような結果が演算されるか試してみましょう。
(普通にやるのも面白くないので、進数変換の勉強も兼ねてプログラムを書いていきます。)

2進数同士の&演算後、2進数を10進数に変換するプログラム
public class Main {

	public static void main(String[] args) {

     //aに101と100の&演算の結果を代入
		int a=101&100;

                //10進数に変換するためには、String型を第一引数に入れる必要があるため、
                   aをStringに変換します。
		String b=String.valueOf(a);

                //先ほどのaを代入したbを2進数から10進数に変換し、int型変数のcに代入。
		int c=Integer.parseInt(b,2);
               
		System.out.println(a+"左の2進数を10進数に変換しました。"+c);
		
	}
}

上の結果は、
a=100
b="100"
c=4になったと思います。

スクリプトに解説も記載しているので、目を通しておくと良いと思います。

ちなみにintからStringへの変換などはキャスト演算子としてこれから勉強していきますが、
2級の範囲にあるので、覚えておくと良さそうです。

16進数同士を演算後10進数に変換しaを出力するプログラム
public class Main {

	public static void main(String[] args) {
		int a=0xa&0xa;
		System.out.println(a);
		
	}
}

上の結果から10が表示されましたね。

aが表示されないのは、int型の変数aに代入しているので、printしたときに整数以外は表示できないため、10進数が表示されています。

2進数を10進数に変換したときと異なり、今回は、16進数aの前にリテラルを用いてみました。

正直2進数や、16進数から10進数に変換するときは、このリテラルを用いれば楽じゃないかと思います。

後、単純なことですが&演算子は整数ビット演算子であるためString型同士の演算はできません。同じくfloatも

そのため、今回は、aの前に0xをつけ整数にしたのちaに代入しました。

今日のまとめ

  • 演算子について
  • 2進数や16進数から10進数への変換。リテラルを付けた場合。キャストでの変換。
  • 16進数を&演算する際には、0xをつけて、演算すること。

感想

  • 長くなってしまうので、次は一つのテーマに絞って短く伝えられるようにします。