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

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

SoltyRevantの回答

回答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進数に変換する方法ですが、なぜあれは、下から読んでいくのでしょうか? その理屈が解りません。

関連するQ&A

  • 2進数の重み対応表について

    度々すみません。ご協力お願いします。 2進数から8進数への変換ですが以下の2進数重み対応表の意味がいまいち分かりません。 問題: 2進数 1100.01の8進数への変換を次の手順で行う。 (1)3桁づつ区切る: (2)2進数の重み: (3)掛けて足す: (4)8進数: 001 100 . 010 ※3桁無い場合は0を補う 421 421 . 421 ←2進数重み対応表 001 400 . 020 ※掛けて足す 回答:14.1 質問: a.少数以下の重み対応表.421の意味が不明です。  (10進法だと、.10^-1, 10^-2・・・は分かりましたが・・) b.同様に2進数から16進数の場合の小数以下.8421も不明です。 簡単な質問かもしれませんが何卒宜しくご教授お願いします。

  • 10進数 → 2進数

    小数点を含んだ実数の、10進数から2進数への変換のやり方がよくわかりません。できるときとできないときがあります。たとえば、 (0.1)_10 = (0.0001100110011・・・)_2 ※(A)_xとは、数値Aのx進数表現というイミです。以下もこの表現を使います。 となるらしいですが、どうやればいいのでしょうか?わかりません。 また、ついでに聞いておきたいことがもう一つあります。小数点を含まない数値の 変換も教えていただきたいです。 たとえば今までぼくは、(101)_10を2進数に変換するのに、 (101)_10 = (100 + 1)_10 = ( 2^2・25 + 1 )_10 = ( 2^2・( 2^3・(2 + 1) + 1 ) +1 )_10 = (2^6 + 2^5 + 2^2 + 2^0 )_10 = (1100101)_2 などという、めんどくさいことをやっていたのですが、もっとスマートなやりかたはないでしょうか? コンピュータもいちいちこんなやり方でやっていたら、計算量多すぎてやってられないような気がするので、きっとあると思うんですけど…簡潔なアルゴリズム…

  • 基数変換の変換につきまして

    現在基本情報技術者の勉強をしています。 10進数から2進数への変換など基数変換がよくわかりません。 10進数の数値を 「 0 」 になるまで 「 2 」 で割り算していき、その結果の「余りの数 」を並べることによりある10進数の値を2進数の値へ変換することができることは分かるのですが、 どういう仕組みでそのようにしたら求められるのかがまだ理解しきれないのです。 とくに少数を変換するときなどはまた戸惑ってしまい、それをまた16進数や8進数などスムーズに変換することができません。 基本的な質問で大変申し訳ないのですがどうかご教授頂ければ幸いです。 どうぞよろしくお願いいたします。

  • 2進数を16進数に変換するにはどうしたらいいのでしょうか?

    たとえば、10110111110という2進数を16進数に変換するには どうしたらできるのでしょうか?よろしくお願いいたします。 (本などで調べたら、下から4桁ずつ区切るとよいとかいてあったのですが よく意味がわかりませんでした。) コンピュータにあまり詳しくないので、どなたか初歩的に優しく教えていただけないでしょうか?

  • 2進数と10進数と16進数の変換について

    私の学校の情報の授業の中で、2進数を16進数にしたり、また、逆をやったり、10進数を交えた、変換のテストが毎回の授業であるのですが、私は納得がいかないのです。 8桁もある2進数の足し算をやらせたり、2進数の引き算、割り算・・・(その他、文章問題など) でも、文句ばかり言っていても始まらないのですが・・・     (履修不足問題で毎回、テストをやることになってしまったらしい) そこで質問です。 私の知っているやり方が、2進数なら、10進数を2でひたすら割っていき、余りを後ろから読む。16進数も同様です。 これが厄介なもので、2進数の4桁までならどうにか10進数に変換できるのですが、8桁ともなると、問題を見た瞬間に冷や汗です。(苦笑) これしか知りません。(16→10 も知りません) しかし、他の効率的なやり方があるという話を聞いたことがあります。 毎回、10進数に直して計算していると、確実に時間がないのです。 他の効率的なやり方をご存知の方、また、そういうサイトをご存知の方いらっしゃいましたら、返答、よろしくお願いします。

  • この10進数は?

    こんばんは。大学1年生です。 コンピュータ関連の授業で、「ある10進数を5進数で表現すると1の位が2桁の数字になり、3進数で表現すると1の位が0となった。この10進数は何か」という問題があり、回答が12(10進数)でした。 12という回答で合っていますか?また、この問題の考え方がはっきりとわからないので、わかる方に教えて頂きたいです。 お手数をおかけしますが宜しくお願い致します。

  • このシンプルな進数の変換はどういう流れで行っているのでしょう?

    このシンプルな進数の変換はどういう流れで行っているのでしょう? (1)06201E90h この16進数の数値が (2)2104976d こうなって、 (3)76491002 こうなることについて、 「PackedBCDに変換して下位から並べる」という説明を受けたんですが、 そのとき上記の数値と説明だけメモして納得したつもりが、後で実際に変換しようとすると訳が分からなくなりました。(2)から(3)へは、並んでいるのを2文字ずつとって逆にしていると分かったのですが、(1)から(2)が・・・。 (2)の末尾にdが付いてるので10進数に変換していると思うのですが、普通に変換したらEが14という2桁の数値になって意味不明になります。 また、PackedBCDは4ビットで1桁の10進数を表すとありましたが、 上記の式をそれに当てはめてどうしようというのでしょうか。(もしかしたら聞き間違えた可能性もあるので、似たような用語がないか調べているところです。) どなたかご教示くださいますでしょうか。

  • 2進数から10進数へ変換

    C言語で、2進数から10進数に変換するプログラムを作ろうと思っています。 手計算で行う場合は2進数の 下1桁目×1 下2桁目×2 下3桁目×4。。。と計算しています。 下○桁目を取り出す方法を考えているのですが、思いつきません。 3桁の2進数を変換するプログラム(とりあえず101を変換することを考えて・・・)を書いてみたのですが、101を考えすぎたためか上手くいきませんでした。 最終的には10進数でintの範囲内程度の2進数の変換ができるプログラムを書きたいと思っています。 アドバイスをお願いします。 ちなみに、考えてみたプログラムは以下の通りです。 101以外で上手く変換できませんね・・・ ここに貼り付けるのが恥ずかしいです。 #include <stdio.h> main() { int x ,i ,z[3]; scanf("%d",&x); z[0]=x/100*4; z[1]=(x/10-10)*2; z[2]=(x-110)*1; printf("%d",z[0]+z[1]+z[2]); return 0; }

  • コンピューターで扱う、2進数について

    コンピューターは0と1しか理解できず、 つまりそれは2進数で、それを4桁に区切って16進に変換して表現することが多いと思います。 今ふと思ったのですが、 何故16進なのでしょうか? 例えば3桁区切りで8進、5桁区切りで32進、 ではいけなかったのでしょうか? 例えばIPアドレスなんかも16進2桁ですよね? 2進の4桁+4桁ですよね。 単純にそう言う風に決めてしまったということなのでしょうか?

  • テキストボックス(###,#)の表示が16進数に変換されてしまう。

    こんにちは。VBA(ACCESS2003)初心者です。 どうぞ、よろしくお願いします。 現在、テキストボックスにカンマ書式(###,#)を設定しているのですが、16桁以上の数値を入れると、16進数に変換されてしまうのです。 これを、変換させずに入力したままの値にするにはどうしたらいいのでしょうか? すみませんが、ご回答を宜しくお願いいたします。