平成13年春期試験問題 午前問3

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ある整数値を,負数を2の補数で表現する2進表記法で表すと最下位2ビットは"11"であった。10進表記法のもとで,その整数値を4で割ったときの余りに関する記述として,正しいものはどれか。ここで,除算の商は,絶対値の端数が切り捨てられるものとする。

  • その整数値が正であれば3
  • その整数値が負であれば3
  • その整数値が負であれば-3
  • その整数値の正負にかかわらず0
正解 問題へ
分野 :テクノロジ系
中分類:基礎理論
小分類:離散数学
解説
設問では「ある整数値を,…2進数記法で表すと最下位ビットが"11"であった」としています。最下位2ビットが"11"となる整数値の特徴は正負によって異なるので、場合分けして考えます。

【正の数】
正の数には2の補数を使わないので、2進数の形「xx…x11」をそのまま10進数に直すことを考えます(xはどんなビットでも構いません)。いくつか例を挙げて説明します。
  • 111(2) → 7(10)
  • 1011(2) → 11(10)
  • 10111(2) → 23(10)
  • 110011(2) → 51(10)
この4つの例が示すように、2進数で下位2ビットが"11"の正の数は、必ず「4で割ったときに余りが3になる数」となります。これは、4で割るという処理が、2進数ではビットを右に2ビットシフトする操作と同義だからです。右に2ビット動かすと、"11"(=10進数の3)の部分が切り捨てられ、これが余りとして残ります。

【負の数】
負の数を2の補数に変換するときと反対の手順で、2の補数で表現された「xx…x11」の絶対値を表すビット列を求めます。
  1. xx…x11 から1を引く。
    xx…x10
  2. 全てのビットを反転させる。
    xx…x01 //絶対値の2進数表現
このことから、2の補数表現で下位2ビットが"11"となる負の数がある場合、その数の絶対値では下位2ビットが必ず"01"になるとわかります。下位2ビットが"01"となる数は、10進数では次の数です。
  • 101(2) → (絶対値)5(10) → (負数)-5(10)
  • 1001(2) → (絶対値)9(10) → (負数)-9(10)
  • 10101(2) → (絶対値)21(10) → (負数)-21(10)
  • 110001(2) → (絶対値)49(10) → (負数)-49(10)
これらの負数を4で割ると余りは「3または-1」になります。ここで、設問の「除算の商は,絶対値の小数点以下を切り捨てるものとする」という条件を適用すると、
  • -5÷4=-1.25 → 絶対値の小数点以下を切り捨てると商は-1
    商が-1ならば余りは-1
  • -9÷4=-2.25 → 絶対値の小数点以下を切り捨てると商は-2
    商が-2ならば余りは-1
というように、常に「4で割った余りは-1」になります。

以上より、最下位2ビットが"11"である整数値を4で割った余りは、その整数値が正ならば3、負ならば-1と結論付けられます。したがって「ア」の記述が適切です。

【2の補数】
2進数で負数を表現する方法の一つです。ある負の数を2の補数で表すには、①その負の数の絶対値を2進数に直し、②すべてのビットを反転して、③その結果に1を加えます。

例)10進数表記の -10 は以下の手順で2の補数に変換します(8ビットの固定小数点数)。
  1. -10の絶対値である10を2進数に直す。
    10(10) → 00001010(2)
  2. 00001010(2)の全ビットを反転させる。
    00001010(2) → 11110101(2)
  3. ②の結果に1を加える。
    11110101(2) → 11110110(2)

この問題の出題歴


Pagetop