修了試験 2021-07-25実施分 基本情報技術者試験 問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になったビット列です。 手順3:Aのうち最も右の1だけがCと重なるので、AとCの論理積を取ります。 A AND C=00101000 AND 00001111=00001000となり、例の答えと一致します。 【選択肢別解説】 1:× AとCの排他的論理和は00100111となり、最も右の1が消えて他の1が残ります。 2:× 否定論理積は論理積の結果を反転するので11110111となり、求めたい結果の逆になります。 3:○ 論理積を取ると、AとCの両方が1である最も右の1だけが残り、00001000が得られます。 4:× 論理和は00101111となり、元のAの1も右側の0もすべて1として残ってしまいます。 【ポイント】 「A AND (A XOR (A-1))」で最も右の1を取り出せます。 同じ結果は「A AND (-A)」(2の補数との論理積)でも得られるので、あわせて覚えておくと便利です。まとめて解く
修了試験 2021-07-25実施分を通しで解く(80問)→