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

選択肢
ア:3847
イ:7680
ウ:7694(正解)
エ:8978
🔒 解説は解答すると表示されます
画素アドレス計算【午前2解説】
正解の理由
始点 (54) と終点 (98) はそれぞれ座標 (5,4) と (9,8) を表します。これらを結ぶ直線は x と y が同時に 1 ずつ増える対角線で、直線上の x=7 に対応する座標は (7,6) です。問題のメモリ割当は x が最も早く変わる行優先(行ごとに x=0 → x=639 を連続割当)で、1画素は16ビット(2バイト)です。画素番号は で表され、(7,6) の画素番号は 。先頭バイトの番地は画素番号に2を掛けた となるため、選択肢のうち ウ が正しい理由です。
解法ステップ
- 表記の解釈:表記
(54)は(5,4)、(98)は(9,8)と読む。 - 直線上の対応点を列挙:(5,4),(6,5),(7,6),(8,7),(9,8) なので x=7 は y=6 に対応。
- 画素番号を求める:画素番号 = → .
- バイト番地に変換:1画素 = 16ビット = 2バイト → 先頭バイト番地 = 。
- よって先頭バイト番地は 7694(選択肢 ウ)。
例として数値を並べるとわかりやすいです:y=6, x=7 → 画素番号 3847 → バイト先頭番地 7694。
選択肢別の誤答解説
- ア: 3847
- これは画素の「番号」(ピクセルインデックス)であり、問題が尋ねる「メモリのアドレスの先頭」はバイト単位なので2倍する必要があります。
- イ: 7680
- 7680 は例えば のような計算結果に見えますが、本問題の (7,6) の画素に対応しません。オフバイ何か(yを6ではなく5で計算している等)の誤りが考えられます。
- ウ: 7694
- 正答。上記の通り画素番号3847を2倍したバイト先頭番地。
- エ: 8978
- 8978 は今回の正しい計算結果とは無関係な値で、ビット深度や行幅の取り違え等の計算ミスです。
よくある誤解
- 画素番号とバイト番地を混同する
- 「3847」を最終答とする誤り。問題は「メモリのアドレス(番地)」を問うているため、1画素=2バイトを考慮して倍にする必要があります。
- 座標表記の読み違い
(54)を十進数「54」と誤解する、または(5,4)と読むべきところを逆に読む(x,y を取り違える)ミス。必ず (ab)→(a,b) と解釈する。
- 0始まりと1始まりの混同
- 画素配置は (0,0) から始まるため、行・列の開始インデックスが0である点を忘れるとオフバイワンになります。
補足コラム
一般化すると、横幅を W(ここでは640)、1画素を B バイト(ここでは2)としたとき、座標 (x,y) の画素先頭バイト番地は次の式で求まります:
この式を覚えておくと、解像度やビット深度が変わる問題にも素早く対応できます。
コードで確認する例(Python):
W = 640
B = 2
x, y = 7, 6
pixel_index = y * W + x
address = pixel_index * B
print(pixel_index, address) # 3847 7694
FAQ
Q1: 「先頭は何番地か」はバイト単位の値を指しますか?
A1: はい。本問題にある「番地」はメモリ上のバイト番地を指すため、画素番号にバイト数(ここでは2)を掛けた値が答です。
A1: はい。本問題にある「番地」はメモリ上のバイト番地を指すため、画素番号にバイト数(ここでは2)を掛けた値が答です。
Q2: もし 1画素が8ビットだったらどうなりますか?
A2: その場合は B=1 なのでアドレスは画素番号と同じになります(例:3847 がそのまま先頭番地)。
A2: その場合は B=1 なのでアドレスは画素番号と同じになります(例:3847 がそのまま先頭番地)。
Q3: 図の波括弧が示す意味は?
A3: 図はメモリの8ビット単位を示し、複数のバイトが行ごとに割り当てられている様子を表現しています。本問の条件(行優先、1画素=16ビット)に従って計算すれば図の細部に依らず答えが得られます。
A3: 図はメモリの8ビット単位を示し、複数のバイトが行ごとに割り当てられている様子を表現しています。本問の条件(行優先、1画素=16ビット)に従って計算すれば図の細部に依らず答えが得られます。
関連キーワード: 画素配置、アドレス計算、ビット深度、行優先メモリ、オフバイワン

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

