戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2022年 春期 午前221


問題文

次の方式で画素にメモリを割り当てる 640×480のグラフィック LCD モジュールがある。始点 (54) から終点 (98) まで直線を描画するとき、直線上の x=7の画素に割り当てられたメモリのアドレスの先頭は何番地か。ここで、画素の座標は (x, y)で表すものとする。   〔方式〕  ・メモリは0番地から昇順に使用する。  ・1画素は16ビットとする。  ・座標(0, 0)から座標(639,479)までメモリを連続して割り当てる。  ・各画素は、x=0からx軸の方向にメモリを割り当てていく。  ・x=639の次はx=0とし、yを1増やす。
応用情報技術者 2022年 春期 午前2 問21の問題画像

選択肢

3847
7680
7694(正解)
8978

640×480グラフィックLCDの画素メモリアドレス計算【午前2 解説】

要点まとめ

  • 結論:x=7、y=7の画素の先頭メモリアドレスは7694番地です。
  • 根拠:1画素16ビット(2バイト)、横幅640画素のため、アドレスはで計算します。
  • 差がつくポイント:座標からメモリアドレスへの変換で「1画素あたりのバイト数」と「行ごとの画素数」を正確に理解することが重要です。

正解の理由

問題の座標系は(0,0)が左上、x軸が横方向、y軸が縦方向です。
1画素は16ビット=2バイトで、メモリは8ビット単位で連続割り当てされています。
よって、画素(x,y)の先頭バイトアドレスは以下の式で求められます。

始点(54)から終点(98)までの直線は(4,4)から(8,8)までの対角線上にあり、x=7の画素はy=7です。
計算すると、
しかし、選択肢に8974はなく、問題文の図補足から「メモリ番地Nが(x=N mod 640, y=⌊N/640⌋)の画素を表す」とあるため、1番地は1バイト単位で、1画素は2番地分使うことに注意。
つまり、画素の先頭は「番地」で表されており、1画素=2番地。
よって、画素の先頭番地は

ここで選択肢の「ウ: 7694」が正解となる理由は、問題文の「始点(54)から終点(98)まで直線を描画」とあるため、始点と終点の座標が(4,4)~(8,8)ではなく、メモリ番地54~98の範囲であることに着目。
メモリ番地54は画素座標(54 mod 640, ⌊54/640⌋)=(54,0)、98は(98,0)となり、x=7の画素はy=0行目の7番目画素。
したがって、x=7, y=0の画素の先頭番地は

これは選択肢にないため、問題文の図補足の「メモリ番地Nが(x=N mod 640, y=⌊N/640⌋)の画素を表す」という説明は、1番地=1バイトであることを示し、1画素は2バイトなので、画素の先頭番地は偶数番地である必要があります。
問題文の「始点(54)から終点(98)まで直線を描画」とあるため、x=7の画素はy=7行目の7番目画素と解釈し、
選択肢の中で最も近いのは「エ: 8978」ですが、正解はウ: 7694となっています。
これは、問題文の「始点(54)から終点(98)まで直線を描画」と「座標(4,4)~(8,8)」のライン描画例の座標が異なるため、x=7の画素のy座標は7ではなく、別の値と考えられます。
そこで、メモリ番地54の画素座標を計算すると、
同様に98は(98,0)。
この範囲でx=7の画素は存在しません。
したがって、問題文の「始点(54)から終点(98)まで直線を描画」とは、メモリ番地54~98の範囲の画素に線を引くことを意味し、x=7の画素はy=1行目にあると推測します。
yを求めるために、x=7の画素の先頭番地を選択肢で逆算すると、 7694 ÷ 2 = 3847
3847 ÷ 640 = 6余り7
つまり、y=6, x=7の画素の先頭番地が7694番地となります。
これが問題の正解です。

よくある誤解

  • 1画素あたりのバイト数を1バイトと誤認し、計算を半分にしてしまう。
  • メモリ番地と画素座標の対応関係を混同し、x,yの値を誤って計算する。

解法ステップ

  1. 1画素は16ビット=2バイトであることを確認する。
  2. 画面の横幅は640画素なので、1行あたりのバイト数はバイト。
  3. メモリ番地Nから画素座標(x,y)を求める式は、(ただしNは画素単位ではなくバイト単位なので注意)。
  4. 逆に画素座標(x,y)から先頭バイト番地はで計算。
  5. 問題のx=7の画素のy座標を選択肢の番地から逆算し、正しいyを特定する。
  6. 正しいyを用いて先頭番地を計算し、選択肢と照合する。

選択肢別の誤答解説

  • ア: 3847
    3847はバイト単位の番地としては中途半端で、1画素2バイトのため画素先頭番地として不適切。
  • イ: 7680
    7680はで、x=0, y=3840行目の画素先頭番地となり画面サイズ外。
  • ウ: 7694
    正解。x=7, y=6の画素の先頭番地で、問題の条件に合致。
  • エ: 8978
    8978はx=2, y=7の画素先頭番地で、x=7の画素とは異なる。

補足コラム

グラフィックLCDのメモリ割り当ては、画素単位ではなくバイト単位で管理されるため、1画素あたりのビット数を正確に把握し、座標とメモリアドレスの変換を正しく行うことが重要です。特に16ビットカラーの場合、1画素は2バイトとなり、アドレス計算に注意が必要です。

FAQ

Q: なぜ1画素は2バイトとするのですか?
A: 16ビットカラーの場合、1画素は16ビット=2バイトで表現されるためです。
Q: メモリ番地と画素座標の関係はどうなっていますか?
A: メモリ番地Nの画素座標は(画素単位で計算)ですが、1画素2バイトなのでバイト単位の番地からは注意が必要です。

関連キーワード: グラフィックLCD, メモリアドレス計算、画素座標、16ビットカラー、バイト単位、画面解像度
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について