問2 画面の画素描画に関する次の記述を読んで,設問に答えよ。
水平方向及び垂直方向がそれぞれ 128 画素からなる画面がある。水平方向を
x 座標,垂直方向を y 座標とする。この画面の 1 画素の状態を 1 ビットで記憶する配列
MAP(添え字は 0 から始まる)がある。配列 MAP の各要素の大きさは 16 ビットであり,各ビットの値が
1 のときには対応する画素が点灯し,0 のときには消灯する。画面上の画素の座標と,配列
MAP の要素中のビット位置との関係を図に示す。

設問
座標(x,y)が与えられたときに,対応する画素を点灯又は消灯するアルゴリズムを作成する。このアルゴリズムを説明した次の記述中の【 】に入れる正しい答えを,解答群の中から選べ。ここで,X,Y,N,V,Q,S,W は,すべて 16 ビットの符号なし整数とする。a,b に関する解答群
(1) 座標(x,y)の画素に対応するビットが含まれる配列要素の番号 V を求める。
- x を X に代入し,y を Y に代入する。
- 画面の水平方向 1 行に対応する配列要素の個数を N とする。Y を N 倍するため,Y を【 a 】だけ算術シフトした値を Y に代入する。
- X を【 b 】だけ算術シフトした値を S に代入する。
- Y + S を計算して V に代入する。
(2) 座標(x,y)の画素に対応する配列要素 MAP(V) の該当ビットだけが 1 となっているデータ Q を求める。このため,表に示す配列 BIT を参照する。
表 配列 BIT の内容
配列の要素 要素の値 BIT(0) 32768BIT(1) 16384BIT(2) 8192BIT(3) 4096BIT(4) 2048BIT(5) 1024BIT(6) 512BIT(7) 256
配列の要素 要素の値 BIT(8) 128BIT(9) 64BIT(10) 32BIT(11) 16BIT(12) 8BIT(13) 4BIT(14) 2BIT(15) 1Q を求める処理の手順は次のとおりである。
- X と 15 の【 c 】を求めて X に代入する。
- BIT(X) の値を Q に代入する。
(3) 配列 MAP の内容を変更して,座標(x,y)の画素を点灯又は消灯する。
- MAP(V) の値を W に代入する。
- 点灯する場合には,W と Q の【 d 】を求めて MAP(V) に代入する。
- 消灯する場合には,Q のすべてのビットを反転(0 と 1 を逆に)し,W と Q のビット単位の論理積を求めて MAP(V) に代入する。
| ア 左に 1 ビット | イ 左に 2 ビット | ウ 左に 3 ビット |
| エ 左に 4 ビット | オ 右に 1 ビット | カ 右に 2 ビット |
| キ 右に 3 ビット | ク 右に 4 ビット |
c,d に関する解答群
| ア 2 の補数 | イ ビット単位の排他的論理和 |
| ウ ビット単位の論理積 | エ ビット単位の論理和 |
| オ ビットの反転 | カ 加算結果 |
| キ 減算結果 | ク 乗算結果 |