平成23年 秋期 基本情報技術者 午前 問1

16ビットの2進数n を16進数の各けたに分けて、下位のけたから順にスタックに格納するために、次の手順を4回繰り返す。
a、bに入る適切な語句の組合せはどれか。
ここで、XXXX16は16進数XXXXを表す。

[手順]
(1)    a  x に代入する。
(2)  x をスタックにプッシュする。
(3)  n   b  論理シフトする。

a b
n AND 000F16 左に4ビット
n AND 000F16 右に4ビット
n AND FFF016 左に4ビット
n AND FFF016 右に4ビット


答え イ


解説
16進数の1けたは2進数の4けたである。
すなわち、2進数の数値の下位4けたを取り出すと16進数になる。2進数の下位4けたを取り出すためには、求める値に11112=F16をAND演算すればよい。
これで、下位4けたの16進数にすることができたので、次は下位5〜8けたを取り出すが、このとき求める数を右に4ビットシフトすれば、F16とAND演算すればよくなり計算が楽である。
したがって、aには“n AND 000F16”、bには“右に4ビットシフト”が入る。(イ)

16ビットの2進数を“0001 0010 0101 1001”として、16進数を求めると、まず、これと“000F16=0000 0000 0000 11112”をAND演算する。
 この結果は、“10012=916”になる。
次に、右に4ビットシフトすると“0001 0010 0101 1001”は“0000 0001 0010 0101”になり、これと“000F16”をAND演算する。
 この結果は、“01012=516”になる。
次に、右に4ビットシフトすると“0000 0001 0010 0101”は“0000 0000 0001 0010”になり、これと“000F16”をAND演算する。
 この結果は、“00102=216”になる。
次に、右に4ビットシフトすると“0000 0000 0001 0010”は“0000 0000 0000 0001”になり、これと“000F16”をAND演算する。
 この結果は、“00012=116”になる。
したがって、求める16進数は125916


キーワード
・2進数、16進数
・シフト演算
・スタック

キーワードの解説
  • 2進数、16進数
    数の表記で1けたで幾つまで表すことができるかのことです。
    私たちが通常使用している数は1けたで0〜9までの10個の表現法違法があるので10進数になります。
    2進数の場合、2つなので0と1。16進数の場合、16なので0〜9、A〜F。
  • シフト演算(ビットシフト)
    数値を右か左にけた移動する演算です。
    1234を右に1ビットシフトした場合、123になります。左に1ビットシフトした場合、12340になります。なお、有効けた数が4けたの場合1234の左1ビットシフトは2340になります。
  • スタック
    処理途中のデータを一時的に記憶させるメモリ領域のことで、記憶させた順番と逆の順にデータを取り出します。
    1→2→3→4とスタックにセットすると、取り出す順は4→3→2→1になります。これをLIFO(Last-In First-Out)やFILO(First-In Last-Out)と呼びます。

もっと、「スタック」について調べてみよう。

戻る 一覧へ 次へ