修了試験 2017-07-23実施分 基本情報技術者試験 問2
次に示す手順は,列中の少なくとも一つは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 AND C=00001000 となり、期待する結果と一致します。 【選択肢別解説】 1:× A XOR C を計算すると 00100111 となります。 最も右の1が消え、左側の1が残ってしまうので誤りです。 2:× A NAND C を計算すると 11110111 となります。 論理積の結果をすべて反転した値になり、目的のビット列は得られません。 3:○ A AND C を計算すると 00001000 となります。 Cで1になっている範囲のうち、Aでも1なのは最も右の1だけなので、その1だけが残ります。 4:× A OR C を計算すると 00101111 となります。 右側の0まで1になってしまうので誤りです。 【ポイント】 「Aから1を引く」と、最も右の1とそれより右側のビットが反転する性質は、ビット演算の頻出テーマです。 同じ結果は、Aと「Aの2の補数」との論理積でも得られます。まとめて解く
修了試験 2017-07-23実施分を通しで解く(80問)→