(3)できるだけ少ない知識で解きたい人用「列中の少なくとも一つは1であるビット列が与えられたとき、最も右にある1を残し、他のビットを全て0にするアルゴリズムである・・・aに入る論理演算はどれか」
#基本情報技術者試験 #平成30年 #秋期 #問2 #ビット #アルゴリズム #2進数
次に示す手順は,列中の少なくとも一つは1であるビット列が与えられたとき,最も右にある1を残し,他のビットを全て0にするアルゴリズムである。例えば,00101000が与えられたとき,00001000が求まる。aに入る論理演算はどれか。
手順1:与えられたビット列Aを符号なしの2進数と見なし,Aから1を引き,結果をBとする。
手順2:AとBの排他的論理和(XOR)を求め,結果をCとする。
手順3:AとCの [ a ] を求め,結果をAとする。
ア 排他的論理和(XOR)
イ 否定論理積(NAND)
ウ 論理積(AND)
エ 論理和(OR)
手順がある!例えばの値もある!
だから、例えばの値00101000を「与えられたビット列A」と決めて、手順3の空欄にア~エの演算をあてはめたらどうなるかを試してみる!
まず、手順1と2は、ア~エ共通なので、先にやっとく。
手順1:ビット列A「00101000」から 「00000001」を引いた結果「00100111」をBとする。
手順2:A「00101000」とB「00100111」の排他的論理和を求めてCとする。
00101000 <--- A
XOR 00100111 <--- B
--------------------------
00001111 <--- これがC
これで準備完了。ア~エを手順3にあてはめて、『最も右にある1を残せる』やつを見つける。
ア 00101000 XOR 00001111 = 00100111 <--- 1がいっぱいで×
イ 00101000 NAND 00001111 = 11110111 <--- これも1だらけで×
ウ 00101000 AND 00001111 = 00001000 <--- 00101000の一番右の1だけ残った!コレ!
エ 確認不要
「ウ」でしたね。
特定のビットを残したいときは、だいたいAND・・・