平成30年秋期 問2
https://www.fe-siken.com/fekakomon.php
次に示す手順は,列中の少なくとも一つは1であるビット列が与えられたとき,最も右にある1を残し,他のビットを全て0にするアルゴリズムである。例えば,00101000が与えられたとき,00001000が求まる。[ a ]に入る論理演算はどれか。
手順1
与えられたビット列Aを符号なしの2進数と見なし,Aから1を引き,結果をBとする。
手順2
AとBの排他的論理和(XOR)を求め,結果をCとする。
手順3
AとCの[ a ]を求め,結果を[ A ]とする。
手順1 Aから1を引き,結果をBとする。
00101000 – 1 = 00100111
B = 00100111
手順2 AとBの排他的論理和(XOR)を求め,結果をCとする。
XOR : 排他的論理和
とは、「AあるいはBの論理和以外認めない」=「AもBも正/AもBも偽 の場合を除外したもの」です。
ベン図で書くとこうなります。
今回は、
AかBどちらかの結果が1の場合は1
AとBの答えが揃っているものは0
と考えます。
[ A ]00101000
[ B ]00100111
表に変換すると……↓
A | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
B | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
C | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
C = 00001111
手順3 AとCの[ a ]を求め,結果を[ A ]とする。
AとCは00101000 と 00001111 です。
問題文を見てみると、「00001000が求まる」とあるため、結果が「00001000」となればOKです。
AとCを比べてみます。
A | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
C | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
結果 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
AとCを見比べてみると、「AC両方が1の場合」に1とすると、結果が00001000になります。
「両方が1の場合」となるのは、論理積(AND)のときです。
答え ウ 論理積(AND)