• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2進数&10進数&16進数の変換)

2進数、10進数、16進数の変換方法とは?

このQ&Aのポイント
  • コンピュータで使用される2進数は、0と1の数字を使用して数値を表現します。
  • 2進数を10進数や16進数に変換して表現することで、人間が理解しやすくなります。
  • 2進数から10進数への変換では、2進数と10進数の対応表を利用します。

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

  • ベストアンサー
回答No.7

No2, No5です。 申し訳ございません。 「9641」はただの例としてあげた数字でした。 割った値の余りを下から読み上げる手法は、 10進数の数字を、n進数に変換する際に使われます。 以下は例といたしまして、 10進数の数字「7564」をn進数に変換することを考えて見ます。 変換する場合、基数[n]で割ることによる余りを読み上げていく形となりますので、 以下のような計算手順が出来上がります。 ==================== 「n = 2」 ★10進数 -> 2進数 7564 / 2 = 3782 ... 0 3782 / 2 = 1891 ... 0 1891 / 2 = 945 ... 1 945 / 2 = 472 ... 1 472 / 2 = 236 ... 0 236 / 2 = 118 ... 0 118 / 2 = 59 ... 0 59 / 2 = 29 ... 1 29 / 2 = 14 ... 1 14 / 2 = 7 ... 0 7 / 2 = 3 ... 1 3 / 2 = 1 ... 1 1 / 2 = 0 ... 1 下から読み上げると、 1110110001100(2) = 7564(10) となります。 ==================== 「n = 8」 ★10進数 -> 8進数 7564 / 8 = 945 ... 4 945 / 8 = 118 ... 1 118 / 8 = 14 ... 6 14 / 8 = 1 ... 6 1 / 8 = 0 ... 1 下から読み上げると、 16614(8) = 7564(10) となります。 なぜこのような計算で結果がでるのか? 不思議ですよね。 ならば、上記要領で、 「n = 10」で、10進数の整数を10進数に変換してみましょう。 ==================== 「n = 10」 ★10進数 -> 10進数 7564 / 10 = 756 ... 4 756 / 10 = 75 ... 6 75 / 10 = 7 ... 5 7 / 10 = 0 ... 7 下から読み上げると、 7564(10) = 7564(10) となります。 ... 数字は基数で割ることで余りは常に、 最下位の桁の数字となることになることに気付きましたでしょうか? 10進数->10進数の変換は、結果としては無意味なことですが、 その数字が導き出される手順は2進数、8進数の変換でも同様のメカニズムとなります。 当たり前といえば当たり前のことですが、 何回も見ていれば、その当たり前に気付けるかと思います。

aiueo6391
質問者

お礼

回答ありがとうございます。 ようやく解りました。

その他の回答 (7)

  • t-aka
  • ベストアンサー率36% (114/314)
回答No.8

回答No.1です。 10進数→2進数の変換について、 文字で説明するよりも、wikipediaにわかりやすく記載されています。 https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%80%B2%E6%B3%95 【十進法から二進法への変換方法】を参照ください。 最初の割り算は0ビット目、次の割り算は1ビット目、といった具合に続きます。 最後の割り算は最上位のビットなので、 最上位のビットから順番に並べていきます。

aiueo6391
質問者

お礼

回答ありがとうございます。 ようやく解りました。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.6

>2進数と10進数の対応表2を見ると倍数になっているのですが、 >これはいったいどういう違いなんでしょうか? 対応表2はすべての2進数ではなく、001、010、100・・・といった各桁に対応する10進数のみを抜き出したものです 10進数が桁が上がると10倍になるのに対し、2進数は桁が上がると2倍になるので、各桁のみを取り出した10進数は倍数になっているのです ちなみに各桁の値は10進数では10、10x10、10x10x10、10x10x10x10・・・と増えていくのに対し、2進数では2、2x2、2x2x2、2x2x2x2・・・と増えていきます

aiueo6391
質問者

お礼

回答ありがとうございます。 ようやく解りました。

回答No.5

> 回答ありがとうございます。 > あと一つ疑問点があるので質問させていただきます。 > > 10進数から2進数への変換方法で余りの数を出していき、下から順に > 101000とか余った数と余らなかった数で順に読んでいき2進数に変換する方法ですが、なぜあれは、下から読んでいくのでしょうか? > その理屈が解りません。 No2です。 解らないならば、全て、10進数で置き換えて考えてみましょう。 (10進数の数値を10進数で分解) 「9641」 9641 / 10 = 964 ... 1 964 / 10 = 96 ... 4 96 / 10 = 9 ... 6 9 / 10 = 0 ... 9 下からつなげると、「9641」になります。 余りに出てくる値は常に、一番下位の桁が出てくる形となります。 この理屈と全く同じ理論を、2進数、16進数でも当てはめることが可能です。

aiueo6391
質問者

お礼

回答ありがとうございます。 そもそもこの9641という数字はどこから出てきたのでしょうか? かけるの場合は、上から読み上げて 余りの場合は、下から読んで これも計算の法則が解ればわかる事なんでしょうか?

回答No.4

No.3です。 1バイトを4ビットと書いてしまいましたが、記述間違いです。 正しくは、1バイトは8ビットです。

aiueo6391
質問者

お礼

回答ありがとうございます。 ようやく解りました。

回答No.3

>10進数というのは、0から9までの数字が1増えて10になるんですよね? まあそのとおりなんですが、対応表では、10進数の1~10に対応する2進数が表化されていますが、対応表2では、単純に2進数で繰り上がった値における場合の10進数を表化しているだけのことです。 なので、当然、10進数の1~10に相当する2進数は対応表1と全く同じです。 10進数表記値が変われば2進数表記値も変わる。 たったこれだけのことですよ。 どうしても納得出来ないって時は、パッと閃いた10進数を2進数に変えてみればわかります。 その逆も同じで、閃いた2進数の値を10進数に変えてみても全く同じ結果が得られますよ。 >ネットワークにおいては、2進数を一般的に8桁で表示する これは、間違った捉え方です。 これはネットワークだけに限らず、コンピュータの計算において、2進数表記はすべて4桁区切りで表記します。(一部3桁区切りを得意としているコンピュータもありますが) なぜ、2進数表記を4桁区切りで表すかについてですが、コンピュータは、「バイト単位で処理をしているから」というのがそもそもの回答になってしまいますが・・・ じゃあ「バイト」ってなによ?ってことになると思います。 「バイト」というのは、コンピュータが計算処理を行う最小単位になります。そして、このバイトは、4ビットで構成されています。つまり、2進数でいうところの「0」や「1」が入っているところをビットといい、これが4つ集まって、1バイトとなります。 つまり、 10進数(22)=2進数(00010110)=8ビット=2バイト ということになります。 CPUの主記憶装置やHDD、FDD、メモリなどの外部記憶装置の容量にバイトが使われているのも、同じ意味になりますが、この場合は少し違っていて、記憶装置へ情報を書き込む場合、そのエリア(ビット)に情報があるのかないのかという事を書き込んでいます。つまり2進数ですね。当然ながら、情報がある場合は「1」、ない場合は「0」が書き込まれます。 こうして情報を書き込んでいく場合、先にも書きましたが、コンピュータはバイト単位で処理を行うため、コンピュータが計算間違いをしないように最小容量は1バイトにしなければなりません。こういう制約があるから2進数は4桁区切りで表記しなければならないわけなのです。そして、なぜ4桁区切りなのかというと、1バイト=4ビットなわけですから4桁となるわけです。 ちなみに16進数で表記されている値を2進数で表すときには桁の値を4桁ごとに表します。16進数の1桁当たりの値を2進数に表記しなおす場合、8桁になります。 例えば、16進数「F」を2進数で表記すると「1111」になり、10進数に表記すると「15」になります。 もう一つやってみると、16進数(A5)を2進数に表すと「10100101」となり、10進数に表すと「165」になります。この場合の計算法は、まず「A」を2進数「1010」で表し、次に「5」を2進数「0101」で表したものをくっつけるというやり方が最も楽なやり方です。 本来の16進数→2進数の換算法とは違いますが、楽なやり方で計算しても換算法で計算しても同じ結果になるのですから、理解しやすい方法で換算すると良いでしょう。 脱線させて、参考までに・・・ ゲーム等で「フラグが立つ」という言い方をしますが、これは、1ビット単位の2進数でいうところの「0」が「1」になる事から来ている言葉で、もっとわかりやすく説明すると、「旗揚げゲーム」というものをやったことがあると思います。「白あげて、赤上げて~」ってゲームです。 このゲームでも同じことがいえますが、「白旗」が1ビット、「赤旗」が別の1ビットとした場合、「旗が上がっていない」場合のビット値は「0」であり、「旗が上がっている」場合のビット値は「1」として考えます。 C言語のBOOL型や、VBやJavaのBoolean型は、このビット値のことを指していると考えてもいいでしょう。 BOOL型やBoolean型は、TRUEやFALSEという論理値で表されますが、これを2進数に表すと、 TRUE=1(または-1) FALSE=0 となります。TRUEの「-1」というものは、2進数「1」に加えて負のフラグメント(ー)を足しただけの事で、絶対値は「1」ですから同じ意味になります。 2進数がなぜこうなるのかっていうのは、コンピュータがどういう性格を持っているのかに深く関わっています。 ネットワークだからこうだと誤った認識をしていると、コンピュータがどう処理をするのかがわからなくなってしまいますから、正しい認識を心がけるようにしたほうが良いです。 もちろん、コンピュータですから、PCでもコンピュータネットワークでも、電話でもFAXでも携帯でも、PS4などのゲーム機でも全く同じ考え方です。もっといえば、無線機だってコンピュータで処理されますからPCと同じ考え方です。 また、なぜこの2進数が生まれたのかというと、元々コンピュータは、真空管で計算をしていました。更にいえばコンピュータは軍事的産物の1つだったんですね。 真空管ですから、1つの真空管ではビットでの処理しかされません。ビット処理だと、成否判定しかできないわけです。これに文字判定や計算判定、暗号処理などが加わると、とてもじゃないけど処理なんてしきれませんでした。また、人間がよく使う10進数だと、暗号化した場合に簡単に解読されてしまいます。そこで考えだされたのが8進数や16進数といったものです。ただ、8進数は文字判定にはあまり相性が良くなく、計算しようにも8進数は3桁表示になってしまい、ビット計算に於いて割り切れない事が起こってくるため、コンピュータとしても相性は良くありませんでした。そこで今現在主流となっている16進数を用いることになったのです。16進数は2進数やコンピュータとも相性がよく、この16進数の1桁は2進数で4桁で表されることから、1バイトという単位が開発されました。 このことから、コンピュータにおける2進数表記は4桁で表すように統一され、真空管から半導体に変わった現在のコンピュータにおいても当時の考え方が使われているということになります。 ちなみに8進数は使われていないのかというと、使われています。 主に数値計算用コンピュータに於いて使用されています。言語でいうと「FORTRAN」が8進数計算を得意としています。 また、アポロ時代のNASAは16進数ではなく8進数で距離、時間などの計算をしていたようです。 映画「アポロ13」や「ライト・スタッフ」、また、日本では廃盤になってしまいましたが、米国ドラマ「From the Earth」では8進数計算をしているシーンもありますよ。 「From the Earth」というドラマは、米国の宇宙開発をドラマ化したものです。

aiueo6391
質問者

お礼

回答ありがとうございます。 ようやく解りました。

回答No.2

10進数で考えると、「10」は基数と呼ばれるベースとなる数字です。 8進数で考えると、「8」が基数に、16進数で考えると、「16 (=F) 」が基数となります。 全ての進数の計算は基数を元に計算されます。 「9621」という数字について考えましょう。 10進数ですと、「基数」は10です。 それぞれの桁には、「重み」と呼ばれるものがあり、 それぞれ、基数の累乗となります。 --------------- 10^0 = 1 10^1 = 10 10^2 = 100 10^3 = 1000 --------------- 1の位から見ていくと、 9621の表現は、 (9 * 10^3) + (6 * 10^2) + (2 * 10^1) + (1 * 10^0) =(9 * 1000) + (6 * 100) + (2 * 10) + (1 * 1) =9000 + 600 + 20 + 1 =9621 となります。 この概念は2進数、8進数でも当てはめることができます。 二進数の場合、基数は「2」となりますので、 以下の桁の「重み」は以下の通りとなります。 --------------- 1桁目:2^0 = 1 2桁目:2^1 = 2 3桁目:2^2 = 4 4桁目:2^3 = 8 5桁目:2^4 = 16 6桁目:2^5 = 32 --------------- 11011を見ると、 (1 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) =(1 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1) =16 + 8 + 0 + 2 + 1 =27 となります。 2進数の計算が、2倍ずつになっているのは、この「重み」が「基数」の累乗で決まる原則なため、 2進数ではたまたま、2倍ずつになっているからとなります。

aiueo6391
質問者

お礼

回答ありがとうございます。 あと一つ疑問点があるので質問させていただきます。 10進数から2進数への変換方法で余りの数を出していき、下から順に 101000とか余った数と余らなかった数で順に読んでいき2進数に変換する方法ですが、なぜあれは、下から読んでいくのでしょうか? その理屈が解りません。

  • t-aka
  • ベストアンサー率36% (114/314)
回答No.1

二つ目の表で言いたいことは、本文を引用すると 『【2進数の桁が上がる時】の10進数の値が以下となります。』 2進数と10進数のひも付ではなく(それは最初の表で説明している)、 繰り上がるときの挙動だけを抽出して示したものです。 2進数の桁数を8ビットで表現していること以外は、同じことを繰り返し書いています。 <見方を変えると、ほら。  2進数で1が一つ左にずれると、10進数は2倍になるよね。> そういったことを作者は暗に示しているのでしょう。 最初の表が理解できれば十分だと考えます。

aiueo6391
質問者

お礼

回答ありがとうございます。 あと一つ疑問点があるので質問させていただきます。 10進数から2進数への変換方法で余りの数を出していき、下から順に 101000とか余った数と余らなかった数で順に読んでいき2進数に変換する方法ですが、なぜあれは、下から読んでいくのでしょうか? その理屈が解りません。           

関連するQ&A