見出し画像

(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・・・

いいなと思ったら応援しよう!