• 締切済み

10進数をBCDに変換する方法

10進数から2進化10進数(BCD)に変換するところで疑問があります。 たとえば、10進数の3846をBCDに変換する場合答えはどのようになりますか? 私なりに考えたところまでを示しますが、答えがわかりません。 どこに考え方の間違いがあるのでしょうか? まず、3846を2進数に変換しました。 3846 → 0000111100000110 (2進数)となります。 ここからBCDに変換する場合、4ビットずつを1つと考えて数字を表現するので、上記の2進数の頭から4つずつ分けて考えると 1つ目 0000 2つ目 1111 3つ目 0000 4つ目 0110 の4つにわけました。 続いて、それぞれを10進化しました。 1つ目 0000 → 0 2つ目 1111 → 15 3つ目 0000 → 0 4つ目 0110 → 6 ここで疑問が出てきます。 2つ目のところで、1111を10進化すると15となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5076/13258)
回答No.1

そもそもBCDで 1111 は使用しない。 3846 をBCDで表すと 0011100001000110 です。

関連するQ&A

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

    10進数から2進化10進数(BCD)に変換するところで疑問があります。 たとえば、10進数の3846をBCDに変換する場合答えはどのようになりますか? 私なりに考えたところまでを示しますが、答えがわかりません。 どこに考え方の間違いがあるのでしょうか? まず、3846を2進数に変換しました。 3846 → 0000111100000110 (2進数)となります。 ここからBCDに変換する場合、4ビットずつを1つと考えて数字を表現するので、上記の2進数の頭から4つずつ分けて考えると 1つ目 0000 2つ目 1111 3つ目 0000 4つ目 0110 の4つにわけました。 続いて、それぞれを10進化しました。 1つ目 0000 → 0 2つ目 1111 → 15 3つ目 0000 → 0 4つ目 0110 → 6 ここで疑問が出てきます。 2つ目のところで、1111を10進化すると15となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

  • 2進数からBCDコードへの変換

    今,2進カウンタを作り,これから7セグメントLEDへ出力する回路を作りたいのですが,1桁の場合は,デコーダICでそのまま変換可能なのですが,10進数に直したときに2桁以上になるものは,デコーダの前で各桁ごとのBCDコードに分けてあげないといけなくなります。ここが分からないのです。 回路の構成としては,カウンタ部分をアナログで構成し,そこで8個のスイッチをつけて,それぞれ2進数の各桁の入力としています。これと,3個のデコーダICと7セグメントLEDで2^8=255までを表示させたいのですが,どのような回路構成だとシンプルに作れるのでしょうか。また,そのようなICは存在するのでしょうか。

  • BCD出力で表示されたものをBINに変換すると

    PLC制御を学び始めた初心者です。 BCD出力とBIN出力について勉強している中で、たとえばヒーターの温度設定を行うことを想定して、BCD出力をするタッチパネルを用いて行った温度設定を場合について疑問があります。 たとえば、表示パネル上で63℃と設定したとします。 BCDなので、各桁それぞれを2進数で表して 6→0110 3→0011 つまり 63 = 0110 0011 ということになりますよね。 さらに、データをCPUやPLCに取り込むときにBINデータに変換する必要があると思うのですが、これをBINデータに変換する場合、上記のBCDデータを通常の2進数と見て、一度10進数に戻し、それを再度2進数に戻す作業になると思います。 具体的には、 01100011 =1+2^1+2^5+2^6=102 したがって、10進数の102という数値になりますよね? これを再度2進数化したものがBIN変換した数値ということになると思いますので、 102 = 01100110 (2進数) という風になるかと思います。 つまりPLCの内部ではこの2進数をデータとして取り扱うことになるかと思いますが、 さて、ここでよくわからないのですが、 タッチパネル上では63℃として入力していたのに、内部に入ったら102(℃?単位はわかりませんが・・・)として扱われています。 ここがよくわかりません。63℃のはずが102に変換されてしまっています。 だったら最初から変換などせずにそのままでいいのではないかとも思うのですが?? どなたがご教授いただけませんでしょうか。 なぜBINとBCDが扱われるのかについても教えていただけると幸いです。

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

  • PIC 10ビットをBCD変換をする方法おしえて

    あるサイトで、8bitをBCD変換する方法をみつけました。それは 『  BCD変換くらいは人のプログラムを見るより算数で考えたほうが理解は簡単です。 ある8bit数 x があります。0~255ですね。求める10進数各桁は、100の位をA、10の位をBとします。 A、Bの初期値を0にします。 xが100以上なら、xから100を引いてAに1を加え、この行を繰り返します。xが100未満なら次の行へ。 これで100の位Aが分かり、xには元の数を100で割った余りが入っています。 xが10以上なら、xから10を引いてBに1を加え、この行を繰り返します。xが10未満なら次の行へ。 これで10の位Bが分かり、xには元の数を10で割った余りが入っています。つまり1の位はxです。 』 非常にわかりやすい説明です。ところで、10bitをBCD変換するには どうしたらいいでしょうか。たとえば、PICの10bitのA/Dコンバーターを 使うと、2bitのX_HIGHと8bitのX_LOWの二つのファイルに分割 されてでてきます。これをBCD変換したいんですが。

  • [応用情報]BCDの最大値について

    以下の問題を解いています。 ------------------------------------------------------------------------------------------- 第16問 4nビットを用いて整数を表現するとき,符号なし固定小数点表示法で表現できる最大値をaとし,BCD(2進化10進符号)で表現できる最大値をbとする。nが大きくなるとa/bはどれに近づくか。 --------------------------------------------------------------------------------------------- この解説で、BCDで表現できる最大値は、以下とあるのですが、なぜ9なのか?なぜ102なのかがわかりません。符号付だと4の1乗ビット=15ということは理解しています。 どなたか解説いただけませんでしょうか。 4の1乗ビット=9 4の2乗ビット=99≒10の2乗 4の3乗ビット=999≒10の3乗 4の4乗ビット=9999≒10の4乗 4のn乗ビット=10のn乗

  • EXCELで10進数表記をBCD表示にしたい

    あるソフトのCSVデータがあり、 その中に4664という数値があります。 実際この数値をBCDデータの1234と変換したいです。 変換後のデータは0000~9999までの4桁で、 元データもその範囲外のデータはありません。 関数を探しても、9桁以上のものは変換できないようです。 A1セルの数値をE10セルに表示できる方法を教えてください 変換途中で、他のセルで2進数に変換して、とかでもいいです。 マクロより、単に関数がいいです。 宜しくお願いします。

  • 2進数を36進数に変換する

    2進数を36進数に変換する際、2進数の何桁ごとに区切ればよいのでしょうか? 16進の場合は、4ケタごとに区切ってやるような感じです。

  • 10進数から8けたの2進数に変換

    10進数から2進数への変換はわかるのですが 10進数から8桁の2進数への変換がわかりません。 仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。 どなたか教えていただけますと有難いです。 宜しくおねがいします。

  • 場合の数の問題で・・・

     場合の数の問題で、少し疑問に思うことがあったので質問致しました。  0、1、2、3、4、5の数字から異なる4つの数字を取って並べて4桁の整数を作るという問題で、例えば「2300より小さい数はいくつあるか」と聞かれたとき、問題集には「全体の数ー2300より大きい数」として求めると書いてあります。  小さい数を直接求めてはいけないのでしょうか?(1で始まる4桁の整数の数と、2で始まって次が0、1、2になる4桁の整数の数を求めるやり方をしました。)  どうして大きい数をひくやり方でないといけないのでしょうか?  実際、問題集に書かれている方のやり方ならば答えは合いますが、小さい方を直接求めるやり方(と自分は思っていますが、それが既に間違っているのかもしれないとも思っています)では答えが違ってしまいます。  どうして、まずは大きい数を求めなければならないのでしょうか?

専門家に質問してみよう