プロが教える店舗&オフィスのセキュリティ対策術

16進数のC0B5を10進数に変換すると49333となります。これを逆に16進数に変換するときは、まず49333より小さくて且つ一番近い値である16の乗数で49333を割ります。
一番近い16の乗数は、16^3(4096)となります。割ると12余り181となります。この12が16進数の上一けた目となります。上二桁目を算出するときは、
181を割りますが、ここで質問です。181を割るときは、先述のように181より小さく一番近い値で割るのではなく、小さくなくても16^2(256)で割ります。
なぜ、最初の上一けた目を算出するときだけ、16進数にしたい10進数(49333)より小さい値で割るのでしょうか。

A 回答 (5件)

>なぜ、最初の上一けた目を算出するときだけ、16進数にしたい10進数(49333)より小さい値で割るのでしょうか。


回答:計算効率のため
解説:49333よりも、もっと大きな16^nで割ってもいいですが、その商は0、あまり499333になるのがわかりきっているから。商が明らかに0にならない最大の16^nで計算を始めるわけです。
たとえばn=8として計算すると、
49333 = 0x0000C0B5 の8桁(?) の16進数となります。

>181を割るときは、先述のように181より小さく一番近い値で割るのではなく、小さくなくても16^2(256)で割ります。
181 = 0xB5 の2桁の16進数となりますが、0x100 の位が0であることを確認する意味で、16^2(256)で割るのではないですか?
    • good
    • 1

こんばんは。



んんー?。ひょっとして昔過ぎて私がならった頃と考え方が
変わっているのでしょうか。社会に出てからはコンピュータ
のお話においては16進が基本でしたし(10進の数字を使うこ
とは皆無)、10進数を求める時って電卓で計算してばかりで
したので考え方がかわってたら、そういう考えもあるんだと
思っても構いませんし、混乱をさけるために無視しても構い
ません。。

16の乗数で割っていき、答えが1上になるかをまずもとめ
桁数をこれで把握します。以下10進数の計算、
49333は16で割って答えが1を超えるか(→当然超える)
49333は256で割って答えが1を超えるか(→当然超える)
49333は4096で割って答えが1を超えるか(→当然超える)
49333は65536で割って答えが1を超えるか(→超えない)

これで求める16進の数字は、ffff(hex)以下(最大4桁の16
進数)というのがわかります、
49333を4096でわると12、あまり181。
161を256でわると答えは0、あまり161
181を16でわると11あまり5

これで12、0、11、5という10進の数字を16進にしてC0B5
が回答になります。

4096の次に256で割るのは上の桁から計算していて、256は
3桁目の数字の算出にj必要だからです。
    • good
    • 1

んーと、


別に16^3で割る必要はない。
16(16^1)で割っても良い。
商は3083、余りは5になる。
この5が、16^0の桁になる。
次に3083を16で割ると(トータルで16^2で割ったことになる)
商は192、余りは11になる。11は16進数ではBになる。
このBが、16^1の桁になる。
…以下同様…

別に16^3から割っても16^0から割っても「何の問題はない」。

※16進数の桁の重みがどうのという話は他の回答者さんがしているので割愛しています。

・・・余談・・・
むしろ自分は10^0から割ることを勧める。
これなら49333に限らず、10進数で示される数値が16進数で何桁になるかを考える必要はない。
下の桁から求めるというやり方です。
…ってか、自分は2進数も16進数もこの考え方で教わったぞ…
    • good
    • 0

16^3で割った後は、


16^2
16^1
16^0
と機械的に割っていくのが手順だからです。

もう少しマシに書くと、
16^n
16^n-1
16^n-2
16^n-3


16^0
という手順になるからです。
    • good
    • 0

16進を10進に変換する逆をやるのだから当たり前



C0B5=49333
=16³×12 + 16²×0 + 16¹×11 + 16⁰×5

16³で割ると【商=12】、余り16²×0 + 16¹×11 + 16⁰×5

6²×0 + 16¹×11 + 16⁰×5を16²で割ると、【商0】、余り16¹×11 + 16⁰×5

16¹×11 + 16⁰×5を16¹で割ると、【商11】、余り16⁰×5=5

5を16⁰で割ると、【商5】、余り0

順番商を並べて【商=12】【商0】【商11】【商5】
16進表記にすればC0B5
    • good
    • 0

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