アプリ版:「スタンプのみでお礼する」機能のリリースについて

数学の問題です。桁数に関する次の問題を教えてください。正答は4.です

「数学の問題です。桁数に関する次の問題を教」の質問画像

A 回答 (1件)

2つ解き方を記載します。



[1]バイト数ごとに表現できる10進桁数から解く方法

log10(2) ≒ 0.30  (log10の2 が 凡そ 0.30 )
であることを利用します。

選択肢にあるバイト数で、(10進で)何桁を表現できるかを考えます。

例えば、1バイト なら 2^(8-1) = 2^7 まで表現できますが、
log10(2^7) ≒ 2.1
なので、2^7は10進で3桁ということになります。

つまり、10進で2桁以内なら、1バイトですべて表現可能となります。

(2^7 = 128程度なら、まあこんなことしなくてもわかりますが)

※念のため、桁数の出し方を補足します。
※x桁の10進数(正数)は、10^(x-1)~10^xの間にあるので、
※2^7の10進の桁数をXとすると、
※ 10^(X-1) ≦ 2^7 < 10^X

※両辺のlog10をとると、
※ x-1 ≦ log10(2^7) = 7 * log10(2) < 10^X
※log10(2) ≒ 0.30 であることを使うと、X = 3 (3桁)


同様に他の選択肢について考えると、
2バイト : 2^15 ⇒ 5桁 ⇒ 4桁以内は表現可
3バイト : 2^23 ⇒ 7桁 ⇒ 6桁以内は表現可
4バイト : 2^31 ⇒ 10桁 ⇒ 9桁以内は表現可
5バイト : 2^39 ⇒ 12桁 ⇒ 11桁以内は表現可

20140615は8桁なので、これが収まる最小のバイト数は、4バイトとなります。


[2]一旦16進変換して必要なビット数を算出する方法

要は2進のときの桁数がわかればいいので、2進変換でもいいですが、
割る回数増えて面倒なので、
コンピュータ関係で一般的な16進表現に直します。

16進変換すると、20140615は、
0x1335247
になります。

16進の1桁は4ビットなので、0x335247までで、24ビット
最上位の"1"は1ビットあればいいので、符号ビットもいれて、
0x1335247は26ビットで表現できます。

これを包含する最小のバイト数は、4バイトなので、答えは4バイトとなります。

※念のため、10進→16進変換の仕方は、16で割って余りを並べる、を繰り返していくだけです。
※ 20140615 / 16 = 1258788 余り 7
※ 1258788 / 16 = 78674 余り 4
※ 78674 / 16 = 4917 余り 2
※ 4917 / 16 = 307 余り 5
※ 307 / 16 = 19 余り 3
※ 19 / 16 = 1 余り 3
※ 1 / 16 = 0 余り 1
    • good
    • 0
この回答へのお礼

logをとるのがポイントなんですね。ありがとございました。

お礼日時:2018/06/01 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!