• ベストアンサー

(ソフ開)(平成19年秋午前問題)問1の質問

こんにちは。 表題の問題、具体的な値を代入して答えが分かるのですが、 論理上どのように推理して結果を導き出せるか、 そうしても分からないので、誰か分かる人教えていただきませんか。 問題のテキストをコピーできないので、リンクを書きます。 http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2007h19_2/2007h19a_sw_am_qs.pdf よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.1

xを256で割った時の商と余りを考えます。 元々のxは 上位8ビット=(x div 256) 下位8ビット=(x mod 256) x=(x div 256)*256+(x mod 256) と表現できるはずです。 このとき「*256」は上位8ビットへの位取りだと考えられます。 なので、上位8ビットと下位8ビットを入れ替え、位取りを考えると、 x=(x div 256)+(x mod 256)*256 なので、正解は「イ」になります。

その他の回答 (1)

回答No.2

ANo.1さんの回答で、完璧に正解です。なので、私からは「蛇足になるかもしれない補足」を。 そもそも「256」とはなんぞや、についてです。 例えば、「259」という10進数の数字について考えて見ます。 10進数だと、257=2×100+5×10+9×1(正確には10のゼロ乗)と、各位に分けられます。 2進数だと、1×256(正確には2の8乗)+1×2(正確には2の1乗)+1×1(正確には2のゼロ乗)という位に分けられ、「100000011」という表記になります。 つまりn進数とは、数字を「nの何乗の部分にどんな数字を入れるか」によって表現されるのです。 で、今回の問題の場合は「2進数」「最大値は65535(正確には2の16乗マイナス1)」なので、上位8ビットと下位8ビットは、ANo.1さんの方法で算出することができます。でも、このまま2つの数字を足しても、単なる8ビットの数字が出てくるだけで、問題の題意にそっていません。 今回の場合、最上位のビットには「2の15乗」がいくつあるか、が入っています。上位8ビットの最後には「2の8乗」、つまり「10進数でいうところの256」がいくつあるか、が入っているのです。つまり、ここを境界線にして上位と下位のビットに分けて計算すれば、きれいに「上位8ビット」「下位8ビット」を算出することが可能なのです。 これが、「256」という数字の正体です。