• ベストアンサー

2進数・10進数・16進数

過去ログみてもよく分からなかったので質問します。 題名の通り 2進数→10進数(逆に10進数→2進数)などといったような変換ができません。1学期に授業でやったのですが授業プリントなくしてしまい・・・ 例えば(教科書見ながら書いてます) (1)2進数「0010」がどうして10進数で「2」なんですか(計算方法教えてください?? ↑2進数「0010」を色々計算して「2」を出したような気がします。 (2)16進数から2進数への変換も計算方法を教えてください。 例:16進数「C」がなぜ2進数「1100」なんですか?

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

  • ベストアンサー
  • Quattro99
  • ベストアンサー率32% (1034/3212)
回答No.8

すでにある回答とおなじことですが、2進法では2集まると繰り上がり、10進法では10集まると繰り上がります。 10進法では一桁目を一の位、二桁目を十の位、三桁目を百の位といいますが、これは10^0の位、10^1の位、10^2の位ということです。一桁目は1がいくつあるか、二桁目は10がいくつあるか、三桁目は100がいくつあるかを意味しています。 2進法も同じように考えられます。一桁目が2^0の位、二桁目が2^1の位、三桁目が2^2の位となります。一桁目は1がいくつあるか、2桁目は2がいくつあるか、3桁目は4がいくつあるかということです。 これを一般的にすれば、x進法の場合、n桁目はx^(n-1)がいくつあるかを示しています(うっかりしやすいので、x^nではないことに注意してください)。 なので、x進法を10進法にするのは割と簡単です。しかし、逆はかなり面倒です。基本的には#5さんのようにして計算するしかありません。 逆が面倒なのは人間が10進法を標準に考えるからです。というか、10進法以外で考えることがほとんど不可能だからです。 仮に2進法で考えられる人がいれば、その人には上で書いたような方法で簡単に10進法→2進法に直すことが出来ます。 以下、2進法で考えてみます(10進法の世界で言う2進法は、2進法の世界では10進法と呼ばれることになります。10進法の世界で言う10進法は2進法の世界では1010進法と呼ばれることになります)。 ↓以下「」内は、2進法の世界での話 「1010進法の1桁目は1010^0がいくつあるのかを、10桁目は1010^1がいくつあるのかを、11桁目は1010^10がいくつあるのかを意味しています。」 どうでしょうか。とても2進法の世界の考え方をすることは出来ないことがわかると思います。

shushu77
質問者

お礼

分かりやすくありがとうございました。 よく分かりました。参考にさせていただきます。

その他の回答 (7)

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.7

桁上がりについて理解できていないようですね。 2進数は数字が2になると桁が上がる数値の表記方法です。 10進数で ”1” は2進数で ”1” 10進数で ”2” は2進数では桁上がりするので(1+1) ”10” 10進数で ”3” は2進数では桁上がりなし(10+1)で ”11” 10進数で ”4” は2進数では桁上がりするので(11+1) ”100” こんな感じです。 そして計算で求めたと言うのは、各々の桁の数値が示す値を足しただけです。   1111(2進数)   これは4桁あるので、   (2^3 x1)+(2^2 x1)+(2^1 x1)+(2^0 x1)    ※(2^3)は2の3乗、(2^2)は2の2乗を示す  一番下の桁が1で桁が上がるにつれて下の桁上がりする数値倍になっていきます。  別の書き方をすると   (2x2x2 x1)+(2x2 x1)+(2 x1)+(1x 1)   (8 x1)+(4 x1)+(2 x1)+(1 x1) ですので、0010(2進数)は   (2^3 x0)+(2^2 x0)+(2^1 x1)+(2^0 x0) で、10進数の2を示します。 桁上がりについて、まだよく分からないと思いますので身近な例をあげてみます。 時間は時分秒で表示される60進数とみなすことができます。 60秒で桁上がりして分に、60分が桁上がりして時になります。 10~59と言う数字はありますが、これは記号と思えば60進数と言えます。 計算も例にあげてみましょう。  5025秒(10進数)は何時間何分何秒(60進数)になるか。    5025÷60=83…45 83分あまり45秒    83÷60=1…23   1時間あまり23分  逆に、1時間23分45秒(60進数) は何秒(10進数)になるか。  上の式を見ると時間のあまりは60を2回割って出てきています。もどすなら2回掛ける。  同様に分の数字は60を1回割って出てきています。もどすには1回掛ける。    (60x60x1)+(60x23)+(1x45)=5025 そして16進数 16進数は数字が16になったら桁が上がる数値の表記方法です。 10進数で ”1” は16進数で ”1”          (中略) 10進数で ”15” は16進数では桁上がりしないので ”F” 10進数で ”16” は16進数では桁上がりするので ”10” 10進数において1~9までは一桁で表記できますが、10から桁上がりする直前の15までは一桁で表記できません。 そのため10~15の数字にA~Fの【記号】を割り付けています。 割り当てを覚えられなければ、ノートのすみに10~15の数字を書いて、そこにA~Fの記号を割り当ててみましょう。 すると、C(16進数)に対する10進数の数字は12になることが分かります。 これを2進数に変換すると1100になります。 ついでに・・・ 16進数と2進数がペアで出題されるのは、2進数を4桁づつ区切ると16進数の表記に近づくからです。 例:A3C5(16進数)  A ,  3 , C ,  5  (16進数) 1010,0011,1100,0101 (2進数)  ※分かりやすくするためカンマ(,)で区切りました これ以上深い意味はありません。 2進数を10進数に直すときのテクニック・・・ 覚えておくポイント  1 0000 0000から1を引くと、1111 1111になります。  (256から1を引くと255。128+64+32+16+8+4+2+1を計算するより早い                       ※足し算するだけが計算じゃない) 計算例 1101 1011(10進数を知りたい)  1101 1011 これは、  1111 1111(255) から  0010 0100(32+4) を引いた値と等しいです。

shushu77
質問者

お礼

詳しくありがとうございました。 さんこうにさせていただきます。

  • sakuuuuu
  • ベストアンサー率32% (67/209)
回答No.6

2進数は2で繰り上がります。 10進数の場合、9の次が10 2進数の場合、1の次が10です。 以下は計算時のテクニックです。 2進数→10進数変換 101101という2進数を10進数に直す場合、 6桁あるので右から1,2,4,8,16,32と倍した数値を振っていきます。 そして1のある桁数の数値をたす。 1+4+8+32=45 この本に書いてある http://www.amazon.co.jp/gp/product/4532403596/sr=1-12/qid=1164127389/ref=sr_1_12/250-9764338-1932214?ie=UTF8&s=books 福嶋はすごい分かりやすい。

shushu77
質問者

お礼

分かりやすく解説ありがとうございます。

  • char2nd
  • ベストアンサー率34% (2685/7757)
回答No.5

 2進数で「0010」の場合、  2^3×0+2^2×0+2×1+0=2 となります。(注:「^」はべき乗で、2^3は「2の3乗」を意味する)  従って、「0100」は「4」、「1000」は「8」となります。  16進数の場合、15までの数値を1桁で表しますが、「10」から「15」までは「A」~「F」で表記します。  「C」は10進法だと「12」に相当しますから、2進法だと  12÷(2^3)=1 mod 4  4÷(2^2)=1 mod 0  以下は「0」となるので、「1100」となります。

shushu77
質問者

お礼

なるほど・・・ よく分かりました。ありがとうございました!

回答No.4

(1) 2進数「0010」一番右は1、2番目は2、3番目は4、4番目は8を意味しています。 つまり、右からN番目の桁は2のn-1乗の数字を意味しています。 なので、0010は 8*0+4*0+2*1+1*0=2となります。 参考までに1111ならば 8*1+4*1+2*1+1*1=15となります。 (2) 16進数で英語が出てくるのは0~9まででは表示する数字が足りないからです。なので9の次はA,B,C・・・となります。 つまり、Aが10、Bが11、Cが12となります。 なので16進数「C」は10進数に直すと12。 これを2進数に直すと8*1+4*1+2*0+1*0=12なので「1100」です。

shushu77
質問者

お礼

分かりやすくありがとうございました。 参考にさせていただきます。

  • mgkg
  • ベストアンサー率37% (79/212)
回答No.3

0×(2×3乗)= 0 0×(2×2乗)= 0 1×(2×1乗)= 2 0×(2×0乗)= 0         +) 2 上記が2進数「0010」が10進数で「2」になる計算過程になります。 「重み」って言われる、X乗をそれぞれの桁にかけていき、最後にその合計をします。

shushu77
質問者

お礼

分かりやすいです、ありがとうございました!

  • rtz
  • ベストアンサー率48% (97/201)
回答No.2

http://www.net-newbie.com/tcpip/radix.htmlhttp://www.e-kyozai.jp/cgi-bin/suguru/semi/sf3_9/kiso/s3_9_3.html など参考に。 ちなみに16→2は初めは16→10→2とやった方がいいでしょう。

shushu77
質問者

お礼

サイト教えていただきありがとうございます。参考にして頑張ります。

  • excite33
  • ベストアンサー率2% (1/39)
回答No.1

1010 A 1011 B 1100 C 1101 D 1110 E 1111 F と覚えるしかないでしょう。

shushu77
質問者

お礼

やはり基本を覚えないと・・・ですね ありがとうございました

関連するQ&A

  • 16進数について

    高校の情報という授業で、2進数や10進数や16進数を習いました。 2進数⇔10進数の変換の仕方は分かるんですが、 2進数→16進数  10進数→16進数や、 16進数→2進数  16進数→10進数 の変換の仕方が分かりません(>_<)教科書にも書いてないし、 先生もちゃんと教えてくれなかったのにテスト範囲で困ってます。 至急教えてください!!!!

  • 十進数と十六進数

    過去の質問を見てみたのですがよくわからなかったので質問します。 計算機の授業で十進数の負の数を十六進数に直すという方法を習ったのですが、いまいちわかりません。 問題は「次に示した十進数を二桁の十六進数で表せ」というもので、十進数は「-34」「-105」などです。 基本的なことは分かっているつもりです。 上記の問題の解き方を教えてください。 よろしくお願いします。

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

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

  • 結果を10進数表記するハッシュ計算ツール

    ブラウザ上で動作するMD5等のハッシュ計算ツールは色々ありますが、 題名の通り「計算したハッシュ値を16進数ではなく10進数表記してくれる計算ツール」をご存知ないでしょうか? 16進数表記のハッシュ値を出してから、何らかの方法で10進数表記に変換すれば良い話なのですが その手間を省き、一度の変換で文字列から10進数の数値にできれば便利だなぁと思っております。 ブラウザ上で動作するものであればベストですが、別にそうでなくても構いません。 ただ、できればフリーウェアに限らせてください。 よろしくお願いします。

  • マイナスの進数変換

    マイナスの進数変換の方法を教えて下さい。 例えば簡単な例で、-6(10進)を 2進と16進であらわすにはどうすれば良い のでしょうか? 答えだけでなく、考え方、計算方法も教えて いただければ助かります。 よろしくお願いします。

  • 2進数を

    2進数を10進数に変換する、または16進数を10に変換、などの計算方法がどうもわかりません。 ものすごく簡単に覚える方法ってありますか

  • 10進数を2進数に変換したい。

    業務上であるログの値を解析しています。 ※ログはcsv形式で、Excelに落として編集加工しています。 その中で、10進数を2進数に変換する必要がありますが、変換方法がよくわかりません。 ExcelでDEC2BINという関数があるところまでは突き止めたのですが、 この関数は、与件(10進数)が512を超えるとエラーとなってしまいます。 (解析対象は10進数で10桁です・・。) 2進数に変換する関数、方法などはあるのでしょうか? 大量にログがあるので、一括して加工したいのですが・・。 (VBAの使いかたがわからないので、何とか関数か何かで対処したいのですが・・・。Excelは2002を使ってます)

  • 10進数を12進数に変換する方法

    10進数を12進数に変換する方法を教えてください。 計算機などは使わず手計算で変換する方法です。

  • 留数計算って何?

    「次の関数のラプラス逆変換を留数計算によって求めよ。」 という問題があるのですが、 「次の関数のラプラス逆変換を求めよ。」 ならばともかく、「留数計算によって…」の部分が気になってしまいます。 一体留数計算とはどんな計算なんでしょうか? 手順を細かく書けということでしょうか?