• ベストアンサー

2進数から16進数への変換、あるいはその逆について

はじめまして。 高校の情報の授業で「2進数・10進数・16進数」を勉強しています。 どうしても2進数から16進数への変換、あるいは、16進数から2進数への変換の方法がわかりません・・・ 初心者でも分かりやすい解説をお願いします。

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

  • ベストアンサー
  • cuntach
  • ベストアンサー率44% (56/126)
回答No.1

2進数の各桁を、右から4桁毎に区切って、その4桁を右から1,2,4,8という具合に割り当てます。 その4桁を、16進数の1文字に対応させて、そのまま置き換えるだけです。 これを、2進数の4桁毎に、繰り返せば複数桁の16進数になります。 逆に、16進数を2進数にする場合は、16進数を1桁ずつに分解し、それぞれを2進数4桁に置き換えて、全体を繋げれば完成です。 2進数:16進数:中身 0000=0=0そのまま 0001=1=1そのまま 0010=2=2そのまま 0011=3=2+1 0100=4=4そのまま 0101=5=4+1 0110=6=4+2 0111=7=4+2+1 1000=8=8そのまま 1001=9=8+1 1010=10=8+2 1011=11=8+2+1 1100=12=8+4 1101=13=8+4+1 1110=14=8+4+2 1111=15=8+4+2+1

AOZORASORA
質問者

お礼

分かりやすい説明、ありがとうございました!! おかげで理解することができました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • zk43
  • ベストアンサー率53% (253/470)
回答No.4

2進数で表わされたある数Nを16進数に直すとき、 N=a(n)2^n+a(n-1)2^(n-1)+a(n-2)2^(n-2)+…+a(2)2^2+a(1)2+a(0) (a(i)は0か1) と表わされているとすると、2の指数が0~3,4~7,8~11,12~15,… と4ずつに区切って考えると良いと思います。 0~3の部分 1+2+2^2+2^3=15なので、a(3)2^3+a(2)2^2+a(1)2+a(0)は15以下となる。 4~7の部分 2^4+2^5+2^6+2^7=(1+2+2^2+2^3)2^4=15・16なので、16の係数は15以下 となる。 8~11の部分 2^8+2^9+2^10+2^11=(1+2+2^2+2^3)2^8=15・16^2なので、16^2の係数は 15以下となる。 ・・・ と続けていけば、16^nの係数の部分が15以下になる。 このように、2の指数を4ずつに区切っていけば、16進数の各桁の数が 得られる。 16進数を2進数に直すときは、 N=b(n)16^n+b(n-1)16^(n-1)+…+b(2)16^2+b(1)16+b(0) (b(i)は0以上15以下) と表わされているとすると、16=2^4なので、各桁のb(i)も2進数に すれば、全部2^kの形になるので、これをまとめれば2進数で表せる。 16進数といっているのに、「16」と10進数で表すのは変ですが、 ここでは理解しやすくするためにこう書いた。 プログラム作成が目的なのかわかりませんが、仕組みを理解するために は、いろいろ実際の数字で練習して、感覚をつかむと良いと思います。

AOZORASORA
質問者

お礼

ありがとうございました!! とにかく実践ですね。がんばってみます。

すると、全ての回答が全文表示されます。
  • y_akkie
  • ベストアンサー率31% (53/169)
回答No.3

2進数から16進数への変換は、2進数を4桁(4bit)ごとに区切って変換します。例えば、(010001)2の場合は、 0010,0001 0001 -> 1 0010 -> 2 である事から、(010001)2 -> (12)16となります。 また、1111111の場合も同様に、 0111,1111 ↑  ↑ 7 F により、(1111111)2=(7F)16といった形で変換可能です。 なお、2進数を4桁ずつで区切って上位の不足分はすべて0で補います。 次に、16進数から2進に変換するとき、今度は逆に、16進数の各桁を 4桁の2進数に置き換えます。 例えば、5Fの場合、 5 = 0101 F = 1111 であることから、 (5F)16 = (01011111)2 = (10111111)2といった形になります。 なお、上位の位取りの0は全て除去します。

AOZORASORA
質問者

お礼

ありがとうございました!! 試してみます。

すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.2

2進数4桁と16進数1桁は1対1に対応しています。 2進数4桁で0~15まで表現できます。(1111)2=(15)10 16進数1桁で0~15まで表現できます。 なので、 16進数⇔2進数⇔10進数  0⇔0000⇔0  1⇔0001⇔1  2⇔0010⇔2  3⇔0011⇔3  4⇔0100⇔4  5⇔0101⇔5  6⇔0110⇔6  7⇔0111⇔7  8⇔1000⇔8  9⇔1001⇔9  A⇔1010⇔10  B⇔1011⇔11  C⇔1100⇔12  D⇔1101⇔13  E⇔1110⇔14  F⇔1111⇔15 10⇔10000⇔16 2進数4桁を区切りとして機械的に変換できます。

AOZORASORA
質問者

お礼

ありがとうございました!! 4桁で区切れば変換できるんですね。分かりました。

すると、全ての回答が全文表示されます。