新らしくなった基本情報 科目 B 20問バージョン アルゴリズムとプログラミング サンプル問題6をJavaにしてみました

2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。

ここでは、「基本情報技術者試験 科目 B のサンプル問題20問バージョン」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。

新人エンジニア研修に参加されている皆様の参考になれば幸いです。

基本情報技術者試験 科目 B のサンプル問題  問6

【Javaプログラム】

public class Q6 {
    //本問で問われている関数
    static byte rev(byte byte1) {
        byte rbyte = byte1;
        byte r = 0b00000000; //0b は、直後に続く数値が2進数(binary)であることを示す。以下同じ。

        for (int i = 1; i <= 8; i++) {
            r = (byte) ((r << 1) | (rbyte & 0b0000001)); // |はビットごとの OR 演算子。
            rbyte = (byte) (rbyte >> 1);
        }
        return r;
    }

    public static void main(String[] args) {
        byte num1 = rev((byte) 0b01001011);
        //        Integer.toBinaryStringメソッドは出力結果をビット列で表示するため。
        //        0xFFでマスクしているのは下位8ビットだけを取り出すため
        System.out.println(Integer.toBinaryString(num1 & 0xFF)); // &はビットごとの AND 演算子。
    }
}

【結果】

11010010

【プログラムの解説】

このプログラムは、8ビットのバイナリ数(ビット列)を逆順にするプログラムです。具体的には、入力されたバイト型の値をビットごとに反転させた新しいバイト型の値を出力します。

プログラムは以下のように構成されています。

mainメソッド: プログラムのエントリーポイントです。ここからプログラムが実行されます。

revメソッド: 引数で受け取ったバイト型の値をビットごとに反転させるメソッドです。

mainメソッドの中で、入力としてバイト型の値0b01001011が用意されています。

次に、この値をrevメソッドに渡して、ビットが反転された値を得ます。

そして、結果をビット列として表示するために、Integer.toBinaryStringメソッドを使用します。

さらに、& 0xFFを使って下位8ビットだけを取り出し、結果をコンソールに出力します。

revメソッドは、入力されたバイト型の値をビットごとに反転させる処理を行います。

これは、最初に反転後の値を格納するための変数rを用意し、入力されたバイト型の値byte1を1ビットずつ左にシフトしながら、それぞれのビットをrに格納していくことで実現されています。

この処理は8回繰り返されます(8ビット分)。最後に、反転されたバイト型の値rが返されます。