新らしくなった基本情報 科目 B 20問バージョン アルゴリズムとプログラミング サンプル問題16をJavaにしてみました
2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。
ここでは、「基本情報技術者試験 科目 B のサンプル問題20問バージョン」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。
新人エンジニア研修に参加されている皆様の参考になれば幸いです。
問 16
【Javaプログラム】
public class Q16 {
// 本問で問われているUnicodeコードポイントをUTF-8符号に変換するメソッド
private static int[] encode(int codePoint) {
//配列の先頭にダミーの0を入れているのはJavaの添字が0始まりだから。
int[] utf8Bytes = { 0, 224, 128, 128 };
int cp = codePoint;
int i;
for (i = utf8Bytes.length - 1; i >= 1; i--) {
utf8Bytes[i] = utf8Bytes[i] + (cp % 64);
//utf8Bytes[i] = utf8Bytes[i] | (cp % 64); //この部分はビット列を合成しているのでOR演算(|)でも結果は同じになります。
cp = cp / 64;
}
return utf8Bytes;
}
public static void main(String[] args) {
int codePoint = 0x3042; // ひらがな'あ'のUnicodeコードポイント
int[] utf8Bytes = encode(codePoint); // UTF-8符号へ変換
// 変換結果を出力
System.out.print("ひらがな'あ'のUTF-8符号: ");
for (int i = 1; i < utf8Bytes.length; i++) {
System.out.printf("%8s", Integer.toBinaryString(utf8Bytes[i])); // 2進数表記で出力
if (i < utf8Bytes.length - 1) {
System.out.print(" ");
}
}
}
}
【結果】
ひらがな'あ'のUTF-8符号: 11100011 10000001 10000010 |
【プログラムの解説】
このプログラムは、UnicodeコードポイントをUTF-8符号に変換する encode()
メソッドを定義し、それを呼び出して、ひらがなの文字 "あ" のUTF-8符号を表示するものです。
encode()
メソッドは、Unicodeコードポイントを受け取り、UTF-8符号のバイト列を配列で返します。具体的には、以下の手順でバイト列を生成しています。
- バイト列を表す配列
utf8Bytes
を初期化します。配列の先頭にはダミーの0が入っています。 - Unicodeコードポイントを
cp
変数に代入します。 - バイト列の最後から順番に、
cp
を64で割った余りを各バイトに加算します。UTF-8符号では、2バイト目以降のバイトには先頭に10
のビットをつける必要があるため、64で割った余りを加算することで、先頭2ビットを10
に設定しています。また、加算した後にcp
を64で割ることで、次のバイトに必要な値を求めるために必要な操作を行っています。
main()
メソッドでは、ひらがなの文字 "あ" のUnicodeコードポイント 0x3042
を encode()
メソッドに渡し、UTF-8符号のバイト列を取得します。そして、Integer.toBinaryString()
メソッドを使って、各バイトの2進数表記を出力しています。
このプログラムは、UnicodeとUTF-8符号の相互変換方法を理解する手助けになるでしょう。また、ビット演算を用いたバイト列の生成方法についても学ぶことができます。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2024年11月23日「ゲシュタルト崩壊」とシステム開発
- 新入社員2024年11月23日データベースでテーブル名やフィールド名にスペースを使うことは、一般的には推奨されていません
- 新入社員2024年11月23日「データにはなぜ型が必要なのか?」を2進数の観点から解説
- 新入社員2024年11月23日ディスプレイの解像度の意味と変更方法