修了試験 2020-01-26実施分 基本情報技術者試験 問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だけを残すアルゴリズムの空欄を、例のビット列で実際に計算して確かめる問題です。 Aから1を引くと、最も右の1が0になり、それより右の0がすべて1になります。 【計算】 A=00101000とします。 手順1:B=A-1=00100111です。 手順2:C=A XOR B=00001111です。 Cは、最も右の1の位置とそれより右がすべて1になったビット列です。 手順3:AとCの論理積を取ると、00101000 AND 00001111=00001000です。 これは問題文の例の結果と一致します。 【選択肢別解説】 1:× AとCの排他的論理和は00100111となり、Bと同じ値に戻ってしまいます。 最も右の1だけを残すことはできません。 2:× 否定論理積(NAND)は11110111となり、ほとんどのビットが1になります。 求める00001000にはなりません。 3:○ 論理積(AND)は、AとCの両方が1のビットだけを1にします。 両方で1なのは最も右の1の位置だけなので、00001000が得られます。 4:× 論理和(OR)は00101111となり、Aの1がすべて残ってしまいます。 最も右の1以外を0にできません。 【ポイント】 「A AND (A XOR (A-1))」は、最も右の1を取り出す定番のビット演算です。 空欄補充では、例のビット列を各候補に当てはめると確実に判定できます。まとめて解く
修了試験 2020-01-26実施分を通しで解く(80問)→