• ベストアンサー

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

こんにちは。 10進数から2進数への変換をせよという問いの場合、2で割っていくというのが基本的な考えですよね。割り算を使わずに10進数から2進数に変換する方法というのはあるのでしょうか?ご存知の方いましたらご教授ください。

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

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

No.1の補足です。 10進数の数字は、右から見ていくと、各桁の重みが10^0(10の0乗),10^1(10の1乗),10^2(10の2乗)・・・になっています。 例えば、123でしたら、3*10^0 + 2*10^1 + 1*10^2です。 ということは、100で割ると商が100の位の1になります。 あまりは23です。これを10で割ると商が2であまりが3。 3を1で割ると商が3。当然あまりなし。 つまり、10^nの大きい方から割って、あまりを次の10^nで割ることを繰り返していくと  123÷100=1あまり23  23÷10=2あまり3  3÷1=3 で商を並べると123になりますね。 2進数の場合も同じです。  123÷64=1あまり59  59÷32=1あまり27  27÷16=1あまり11  11÷8=1あまり3  3÷4=0あまり3  3÷2=1あまり1  1÷1=1 で、商を並べると1111011です。 2のn乗は、1,2,4,8,16,32,64,128,256,512,1024,2048,・・・ですが、そのうちこれがキリのいい数字に見えてくるかもしれません。 ちなみに、質問の2で割っていく方法は、2^nの小さいほうから割ってあまりを並べているのと同じです。

kazaana017
質問者

お礼

ご回答ありがとうございました。 なるほど、仕組みが次第に理解できてきました。 参考にしたいと思います。 ありがとうございました。

その他の回答 (5)

回答No.6

 2で割っていくのも、なるたけ大きな2の累乗を引くのも、実はやってることの本質は同じだったりします。どちらもひたすら2の累乗を計算していることなのですから(2でひたすら割っていくのは、2の累乗で割るのと同じですね?)。要するに、2の整数乗を考え、2^n、2^(n-1)、2^(n-2)……2^2、2^1、2^0、の位が1か0かを考えればいいのです。  実際に計算を書いてみるとわかりますが、2で割っていくのは2進数を下の位から求めていく方法、2の累乗を引いていくのは2進数を上の位から求めていく方法、その違いです。  

  • sanori
  • ベストアンサー率48% (5664/11798)
回答No.5

#1の者です。 >しかし狐につままれた感です。 >どうして2のn乗を引き算するとこのような結果になるのでしょうか。 なーに。簡単なことなんですよ。 512円玉 256円玉 128円玉 ・・・ 4円玉 2円玉 1円玉 これらの硬貨が1枚ずつある財布から261円ちょうどを支払うのに、どうやって払うかということです。 261円ちょうど支払うためには 256円玉1枚、4円玉1枚、1円玉1枚。 ほかは全部ゼロ枚。 これを2進数で表わすと 100000101 いかがですか?

kazaana017
質問者

お礼

ご回答ありがとうございます。 具体的に書いていただいて、仕組みがまた理解できてきました。分かりやすかったです。 ありがとうごさいます。

  • seyber
  • ベストアンサー率25% (33/128)
回答No.3

こんにちは。^^ 右手の親指を0(1) 人差し指を 2 中指を 4 薬指を 8 小指を 16 とします。 0、2、4、8、16です。 手を握りリセット(0)にします。 8なら薬指を立て、1000 10なら薬指、と人指し指を立て、1010 左手の小指は32 薬指は64です。

kazaana017
質問者

お礼

こんばんは。ご回答ありがとうございます。 指でカウントする、面白い方法ですね。 分かりやすいです。参考になりました。ありがとうござました。

  • z-knight
  • ベストアンサー率36% (112/304)
回答No.2

こんにちは ご存知かもしれませんが、指を使って数える方法があります。 指を立てたり立てなかったりして0,1を区別します。(指を立てれば1、立てなければ0) 右手から始めます。10進法の1の時は右手の親指を立てます(=2進法の1)。10進法の2の時は人差し指を立てて親指は立てません(=2進法の10)。3の時は人差し指と親指を立てます(=11)。このようにやっていけば、ある程度の大きさまでは数えられます。せいぜい32くらいまでですが。 分かりにくかったらすみません

kazaana017
質問者

お礼

早速のご回答ありがとうございます。 面白い方法ですね! 参考になりました。ありがとうございました。

  • sanori
  • ベストアンサー率48% (5664/11798)
回答No.1

引き算で出来ます。 なるべく大きい2のn乗を引き算する、を何度も繰り返して、最後1を引き算するところまで続ければいんです。 例えば261を2進数にするとすれば 261から512は引けない。 余り261 261から256は引ける→1 余り5 5から128は引けない→0 余り5 5から64は引けない→0 余り5 5から32は引けない→0 余り5 5から16は引けない→0 余り5 5から8は引けない→0 余り5 5から4は引ける→1 余り1 1から2は引けない→0 余り1 1から1は引ける→1 おしまい 答え 100000101

kazaana017
質問者

お礼

早速のご回答ありがとうございました。なるほど、引き算でできるのですか!!しかし狐につままれた感です。どうして2のn乗を引き算するとこのような結果になるのでしょうか。

関連するQ&A

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

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

  • 16進数を10進数に変換について

    16進数を10進数に変換について 今、情報処理の勉強をしていますが、 16進数を10進数への変換にてつまずいています。。。 以下、ご存じの方 お教えください。 16進数:ABCDを10進数に変換する方法が全くわかりません。 参考書をみても 理解ができない方法でした。 参考書の記載は以下でした。 ---------------------------------------------------    重| 16^3   16^2  16^1  16^0    み| 2^12    2^8   2^4   2^0      | 4096   256    16     1  --------------------------------------------------- 16進数|  A      B     C      D   10*4096+11*256+12*16+13  =40690+2560+256+160+32+13  =43520+416  =43981 なぜ、16進数のAが2^12なのでしょうか? 分かりにくくすみません。。。 ご教授頂きたくよろしくお願いいたします。

  • 2進数&10進数&16進数の変換

     ◆ コンピュータで使用される2進数  人が日常使用している数値は10進数ですが、コンピュータは内部で数値を表現する場合、2進数を使用  しています。しかし、「0」と「1」だけの2進数では人が分かりにくいため、人間が見えるところでは  コンピュータは2進数を10進数や16進数が変換して表現しています。ここではその変換方法を学びます。  ◆ 2進数  2進数とは、「0」と「1」の2種類の数字を用いて全ての数を表現します。10進数では0から数えて「9」の  次は位があがることになりますが、2進数では「 1 」の次に位があります。位があがれば、その新しい桁は   「 1 」 となり、それ以下の桁は全て 「 0 」 となります。それでは、2進数の数の増え方を見てみましょう。      ところで、2進数を表現する時は一般的に8桁単位で表現するため、8桁未満の場合は頭に0をつけます。  つまり、上の2進数の値は順番に 00000000 → 00000001 → 00000010 → 00000011 → 00000100 →  00000101 → 00000110 → 00000111 → 00001000 と表します。以下は2進数と10進数の対応表です。 2進数と10進数の対応表 10進数 0 1 2 3 4 5 6 7 8 9 10 ・・・ 2進数 0 1 10 11 100 101 110 111 1000 1001 1010 ・・・  ◆ 2進数から10進数への変換方法  10進数と2進数の対応表は以下の通りです。2進数の桁が上がる時の10進数の値が以下となります。 2進数と10進数の対応表2 10進数 1 2 4 8 16 32 64 128 2進数 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000  従って、2進数で「1」となっている桁に対応する上記の10進数の基準値を合計することにより、2進数から  10進数の値を求めることができます。例えば、2進数の「 00101010 」を10進数に変換する場合、基準値が  32、8、2の所でビットが1なので下図の通り、2進数の「 00101010 」は10進数では「42」だと分かります。            ◆ 10進数から2進数への変換方法  10進数の数値を「 0 」になるまで「 2 」で割り算していき、その結果の「余りの数 」を並べることで  ある10進数の値を2進数の値へ変換することができます。それでは、具体的に変換して見て行きましょう。           例えば、10進数の「160」を2で割り算していくと上図の結果となります。後は、余りの数を下から順番に  並べれば 「 10100000 」 の値が算出されます。次に、「22」を2で割り算していき余りの数を下から順に  並べれば 「 10110 」 の値が算出されます。ネットワークにおいては、2進数を一般的に8桁で表示する  ことから、8桁になるよう上位に「 0 」を追加して「 00010110 」とします。当然「 10110 」と同じ値。 因みにここ参照ですがhttp://www.infraexpert.com/study/ip1.html なぜこれが10進数なんでょうか? 10進数というのは、0から9までの数字が1増えて10になるんですよね? なのに2進数と10進数の対応表2を見ると 倍数になっているのですが、、 これはいったいどういう違いなんでしょうか? 回答お願いいたします。 ほかにも解らなそうな点は、教えて頂けると幸いです。

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

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

  • 10進数を2進数に変換するには・・・

    前にも質問された方がいらっしゃるかもしれないですが検索してもわからなかったのでお願いします。 C言語で10進数を2進数に変換するためにはprintf文を使用して表すことはできないですよね?どうすればよいですか? 例えば10進数である214を2進数の11010110というのに変換したい場合プログラムではどのようになるのでしょうか? 基本的なことですみませんがお願いします。

  • 10進数(+-)→2進数への変換

    10進数 正・負の整数を2進数に変換する方法を ご存知の方ご教示の程宜しくお願いいたします

  • 8進数から2進数に変換の

    8進数223を2進数に変換したいのですが、 まず223を10進数に変換(2×8^2+2×8+3×1=147)→それから2進数に変換→答えは10010011 という方法しかないのでしょうか? 10進数に変換せず、直接2進数にする方法はあるのでしょうか?

  • 16進数変換

    エクセルで10進数のデータを一括で16進数変換する方法があったら教えてください。1セルずつなら関数で変換できるのですが一括変換する方法がわからないのです。わかる方がいらっしゃったらよろしくお願いいたします。

  • 2進数について

    2進数の課題が出されました。足し算と掛け算は自力でわかったのですが、以下の問題がさっぱりです。誰かわかる方回答していただけるととても助かります。 【2進数の割り算】 10101÷11 110111÷101 【2進数の変換】 (1010101)を8進数、10進数、16進数に変換 (1011.01)を8進数、10進数、16進数に変換 【10進数を2進数に変換】 (53)の10進数を2進数に変換 (77.35)の10進数を2進数に変換 【最大桁数を8とする。2の補数を明記して2進数の引き算を足し算で】 10111010-1100111 以上です。よろしくお願いします。

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

    初級シスアドを勉強している者です。10進数から2進数に変換する方法で2で割っていく方法は知っているのですが、解くのに時間がかかってしまいます。もっと早く変換できる方法はありませんか?