• ベストアンサー

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

ybnormalの回答

  • ybnormal
  • ベストアンサー率50% (220/437)
回答No.3

十進数を2で割り続けていき、その余りを並べたものが2進数になるという手続き自体はわかっているようなので、そこから話を始めます。 十進数Xを2の累乗の和として表すと、 X = 2^n*An + 2^(n-1)*An-1 + 2^(n-2)*An-2 + ..... + 2^2*A2 + 2*A1 + A0 です。 このXを2で割ると、2^n*An + ..... +2*A1(長ったらしいので、これをX1としておきます)は偶数であることは明らかなので、余りがA0となり、商はX1を2で割ったものつまり 2^(n-1)*An + 2^(n-2)*An-1 + ....+ 2*A2 + A1(これも長ったらしいのでQ1としておきます)となります。 次にQ1を2で割りますが、2^(n-1)*An + 2^(n-2)*An-1 + ... + 2*A2(長いのでこれをX2とします)は偶数ですから、余りはA1、商はX2を2で割ったもの、つまり 2^(n-2)*An + 2^(n-3)*An-1 + ... A2(Q2と呼ぶことにする)になります。 次にQ2を2で割りますが、この後の処理は先に挙げたものと同様で、余りはA2、商は 2^(n-3)*An + 2^(n-4)*An-1 + .... A3(Q3と呼ぶことにする)となる。 さらにQ3を2で割って.....と続けていってこれ以上割り切れなくなるまでいくと最後の計算の余りはAnになります。 ここまでくれば、元の十進数Xの二進数表現(2^n*An + 2^(n-1)*An-1 + ... 2^2*A2 + 2*A1 + A0)と、割り算の過程であらわれる余り(A0, A1, A2....An)に関連があることがおわかりになると思います。つまり、割り算で求められた余りは、二進数表現の各項の係数となっています。したがって、余りを集めて並べれば二進数となるわけです。

kurage555
質問者

お礼

もう少し数学の勉強をしなければいけないと気づかされました。回答ありがとうございました。

関連するQ&A

  • 16進数の基数について教えてください

    今情報処理の勉強をしています。 10進数の基数は10なのも2進数の基数が2なのもわかりますが、16進数の基数が10(イチゼロ)とはどういうことなのでしょうか。この0はどこから来たのですか?仕組みをいまいち理解するのが難しいです。 ご教授いただけませんか。

  • 基数と基数変換について

    この春初めて基本情報をうけます。 今勉強を始めたばかりでの初学者です。 2進数から10進数に変換の問題で質問です。 2進数の1.1011 と1.1101を加算した結果を10進数であらしなさい。 どうして2進数を足して11.1000になり答が3.5になるかわかりません。 教えて下さい。

  • 基数変換について

    応用情報技術午前問題集を購入しましたが 基数変換について躓いています。 解説がよく分りません。 【問題】 aを正の整数とし、b=a^2とする。aを2真数で表現するとnビットであるとき、bを2真数で表現すると高々何ビットになるか。 ※a^2はaの二乗です。 ア:n+1 イ:2n ウ:n^2 エ:2n 【解説】 8の2乗は64を例に、問題のb=a^2を置き換えてみる。 a(8)、b(64)とする。 a(8)を2進数で表現するとn(3)ビットであるとき、 b(64)を2進数で表現すると6ビットになる。 イ:2n=2×3=6 だそうなんですが、 8は4ビット(1000)、64は7ビット(100 0000)だと思うのですが どう考えたらよいのでしょうか。 日本経済新聞発行 2009年度版応用情報技術高度共通午前問題集より

  • 基数変換のアルゴリズムの問題

    アルゴリズムの問題の回答に納得がいきません。 変換対象をDEC、基数をBASEに格納し、基数変換を行うというものです。 配列Bの添え字は「1」から始まり、DECをBASEで割った余りを 求める関数MODはあらかじめ用意されているものとする。 1.変数Iに1を格納、変数DECに変換対象を格納、変数BASEに基数を格納。 2.MOD(DEC,BASE)の結果を変数Nに格納。 3.NをB(I)に格納。 4.I + 1 をIに格納。 5.「 」の結果を変数DECに格納。 6.DEC=0なら処理終了、それ以外は(2) の処理へ戻る。 「  」内を埋める問題です。 私の答えは「(DEC - N) / BASE」だったのですが、正解は「DEC / BASE」でした。 DECからN(余り)を引いてからBASEで割らないと、 割り切れない場合、最悪いつまで経っても「DEC=0」にはならなくなってしまうと思うのですが、そうではないのでしょうか? 正解は「DEC / BASE」で、あっているのでしょうか? Perlでプログラムを書いて(配列Bの添え字は0からにして、whileの条件式を「DEC != 0」にしました)試してみましたが、 「DEC / BASE」だと、割り切れない場合、結果の0の数がえらいことになってしまいました(^^;) ちゃんと勉強し始めたのがつい最近なので説明がうまくできませんが、どなたか解るかた教えてくださいm(_ _)m

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

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

  • 16進数から10進数への基数変換について質問があります。

    基本情報技術者問題集の設問で、 16進数少数3A.5Cを10進数の分数で表したものはどれか。 ア、939/16 イ、3735/64 ウ、4939/256 エ、14941/256 解説が、 3*16^2+10*16^1+5*16^-1+12*16^-2 =3*16^2+10+16^1+5/16+12/16^2 ={3*16^4+10*16^3+5*16+12}/16^2 * は掛け算の表記として使っています。 ^ は二乗の表記として使っています。 / は分数の表記として使っています。 解説の一行目の3が3×16^2、Aが10×16^1となる意味がよくわかりません。 3×16^1、10×16^0ではないのですか? 基本的なことだと思うのですがお教えください。

  • 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を見ると 倍数になっているのですが、、 これはいったいどういう違いなんでしょうか? 回答お願いいたします。 ほかにも解らなそうな点は、教えて頂けると幸いです。

  • 基数による浮動小数点表示での計算について

    SW-H20の問題です。^は乗算、_は_16なら16進数を示します。 以下の不動少数表示法がある (-1)^s × 0.f × 2^(e-64) ここで、 45BF0000_16(16進数の45BF0000の意味)を上記の定義に変換すると、 0.BF0000_16 × 2^5 となる、というのですが、解説が省略してありわかりません。 同様に、 41300000_16を上記の定義に変換すると、 0.300000_16 × 2 = 0.030000_16 × 2^5 になるとのことですが、これもわかりそうでわかりません。。 それぞれ、先頭の45や41はどこにいってしまったのでしょうか? 基数変換に詳しい方、宜しくお願いいたします。

  • 問題の解き方

    基本情報技術者の、この問題がよくわかりません。 この問題はどうやって解くのでしょうか?解く前に問題の意味もあまり理解できなく、解説をお願いいたします。 ●0000~4999のアドレスを持つハッシュ表があり、レコードのキー値からアドレスに変換するアルゴリズムとして基数変換法を用いる。キー値が55550のときのアドレスはどれか。ここで、基数変換法ではキー値を11進数と見なし、10進数に変換した後、下4けたに対して0.5を乗じた結果(小数点以下は切捨て)をレコードのアドレスとする。

  • 数値のパック10進数の変換について(vb6)

    こんにちは 現在、vb6で開発を行っております。 早速ですが、困っていることがあります。 データベースを読み込んで、その値をテキストファイルに出力しているのですが、ある項目(数値)だけパック10進数に変換して出力しなければなりません。 いろいろなサイトを調べた結果、 例:数値で432 は "0100001100101100" のように変換できることがわかりました。しかし、この時点ではただの文字列のためこの値をテキストファイルに出力しても意味がありません。パック10進数のコード(?)としてテキストファイルに出力するにはこの後、どのようにすればいいのでしょうか。 ご存じの方がいらっしゃれば、ご教授願えないでしょうか?