修了試験 2014-01-26実施分 基本情報技術者試験 問1
次に示す手順は,列中の少なくとも一つは1であるビット列が与えられたとき,最も右にある1を残し,他のビットを全て0にするアルゴリズムである。 例えば,00101000が与えられたとき,00001000が求まる。 aに入る論理演算はどれか。 手順1 与えられたビット列Aを符号なしの2進数と見なし,Aから1を引き,結果をBとする。 手順2 AとBの排他的論理和(XOR)を求め,結果をCとする。 手順3 AとCの[ a ]を求め,結果をAとする。
正答3
解説
正解は3です。 ビット列から1を引くと、最も右の1が0になり、それより右の0がすべて1に変わります。 この性質を使って、最も右の1だけを取り出す手順の空欄を考えます。 例のA=00101000で、各手順をたどります。 手順1では、B=A-1=00100111になります。 手順2では、C=A XOR B=00001111になります。 Cは、最も右の1の位置から右端までが1になったマスクです。 Aのうち1が立っているのは、最も右の1より左側では元のビット、マスク内では最も右の1だけです。 したがって、AとCの両方が1になるのは最も右の1の位置だけです。 【選択肢別解説】 1:× 排他的論理和では最も右の1だけを残せません。 A XOR C=00100111となり、上位の1が残って下位も1になります。 2:× 否定論理積では結果が反転してしまいます。 A NAND C=11110111となり、求める00001000の逆になります。 3:○ 論理積なら両方が1の位置だけが1になります。 A AND C=00001000となり、最も右の1だけが残ります。 4:× 論理和では1が増えてしまいます。 A OR C=00101111となり、上位の1もマスク部分の1も残ります。 【ポイント】 特定のビットだけを取り出すときは、マスクとの論理積を使います。 「A AND (A XOR (A-1))」は「A AND (-A)」と同じく、最も右の1を取り出す定番の式です。まとめて解く
修了試験 2014-01-26実施分を通しで解く(80問)→