基本情報技術者試験 平成31年度 春期 午前 問2
2 進数と 16 進数との変換を含む、ビット演算の問題。
--------------------------
平成31年度 春期 午前 問2
最上位をパリティビットとする 8 ビット符号において、パリティビット以外の下位 7 ビットを得るためのビット演算はどれか。
ア 16 進数 0F との AND をとる。
イ 16 進数 0F との OR をとる。
ウ 16 進数 7F との AND をとる。
エ 16 進数 FF との XOR をとる。
---------------------------------
解説
問題を解くのに必須ではないけど、パリティビットとは受け取った 8 ビット符号が正常か(電子ノイズ等でビットの 1 ,0 が反転してないか)を判断するためのビットのこと。
パリティビットは電気信号が正しく送信できているかのチェックに使うだけで、相手に伝えたい情報を持ってはいないので、問題の様に情報を持つビット列だけを抜き出す演算が必要になってくる。
11001011
例として上のような 8 ビット符号がある場合、左端の 1 がパリティビットで、左から 2番目以降の 1001011 が伝えたい情報となる下位 7 ビットになる。
問題にある "下位 7 ビットのみ得たい" とは、左端のパリティビットが 0 と 1 のどちらであっても常に 0 に変換して無いものとし、そのほかの 7 ビットはそのままの値にしたいという意味。上の例であれば、11001011 を 01001011 にするということ。
まずパリティビット部分を考えると、0 との AND を取れば良い。
以下のように、パリティビットが 0 でも 1 でも、0 と AND をとれば 0 になる。
1 AND 0 は 0
0 AND 0 は 0
XOR(排他的論理和)は両方の値が異なる時に 1、同じ時に 0 となるため、パリティビット部分を常に 0 と変換する演算はできない。
次は下位 7 ビットをどう取り出すか。
そのままの値を保つためには 1 との AND をとればいい。以下のように、元が 1 であれば 1 との AND で 1 になり、元が 0 であれば 1 との AND で 0 になる(元の値のままになっている)。
1 AND 1 は 1
0 AND 1 は 0
まとめると、パリティビットに対応する最上位ビットのみが 0 である 01111111 と AND を取れば良いとなる。
ここで、回答の選択肢が 16 進数なので変換が必要。 2 進数の 4 桁と 16 進数の 1 桁が対応するので、01111111 は上位 4 ビット 0111 と下位 4 ビット 1111 を 16 進数に変換することになる。変換をすべて書くと以下の通り。
2進数 - 16進数
0001 - 1
0010 - 2
0011 - 3
0100 - 4
0101 - 5
0110 - 6
0111 - 7
1000 - 8
1001 - 9
1010 - A
1011 - B
1100 - C
1101 - D
1110 - E
1111 - F
なので、01111111 を 16 進数表記すると 7F になる。7F との AND が答えなので、選択肢ウが正解。
前後の問題はこちら。