• ベストアンサー

BCD・HEX・BINについて

設備のタッチパネルでBCD入力にて100をいれました。HEXに変換した値はいくらでしょうか?

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

  • ベストアンサー
  • theisman
  • ベストアンサー率47% (56/119)
回答No.2

まず、2進と16進の表現方法はお分かりですね。乱暴な言い方をすれば、この2つは同じです。2進を4桁ずつ区切ったものが16進です。 さて、BCDですが、2進を4桁ずつ区切るまでは16進と同じですが、16進のAからFまでを使わない方法になります。つまり、9(=1001)に1を足した時、2進・16進の時は 1010 = A になりますが、BCD表現だと10000になります。2進数の考え方だと、1001の次が10000になりますので連続しないことになりますが、2進を下位から4桁ずつ区切ると、9の次が10と表現されるので、10進数だと思えば連続しているように見えます。 そこで、BCDで100を表現しようとすれば、1桁ずつ'1', '0', '0' をそれぞれ2進4桁で表現して、'0001' '0000' '0000' として、これを並べて 0001 0000 0000 がBCD表現となります。これを16進表現しても、4桁ずつ区切るわけですから"100"になります。 一方、10進数の100をを16進数で表現する場合、100 = 4 + 16×6 となりますから、16進数で64、2進数では 0110 0100 になります。つまり、10進数Xを16進表現するには、 X = k<0> + 16^1 × k<1> + 16^2 × k<2> + … + 16^n × k<n> ( 0 ≦ k<0>, k<1>, k<2>, … , k<n> ≦ 15 ) という k<0>…k<n> を見つけて、k<n>から並べていけばいいのです。具体的な計算方法は、Xを超えない16^nを見つけてXをそれで割ると商がk<n>になります。次にその割り算の余りを16^(n-1)で割ると商がk<n-1>、さらにその余りを16^(n-2)で割った商がk<n-2>、・・・と繰り返して、最後は16で割った商がk<1>余りがk<0>となります。 16^2 = 2^8 = 256, 16^3 = 2^12 = 4096, 16^4 = 2^16 = 65536 ぐらいは覚えておけば、なにかと役に立ちます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • theisman
  • ベストアンサー率47% (56/119)
回答No.1

BCDで100なら、そのまま100になると思いますが。 単に100(DEC)をHEXに直すなら、64(HEX)になります。

mayahira
質問者

補足

おっしゃるとおりですが、変換するときの式はどのようになるのでしょうか?BCDからの10進・16進への変換、10進から16進orBCDへの変換など・・・。16進数は0~F、BCDは2進数を0~9であらわしている。だいたい基本的なことはわかるのですが、データ形式の変換方法がいまいち理解できていないのです・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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が扱われるのかについても教えていただけると幸いです。

  • HEX2BIN関数の使い方。

    HEX2BINを使用して16進数4桁を2進数に変換しようとしたところ=HEX2BIN(B2) (B2セルは6F67)としたところ#NUMエラーが出てしまいます。 B2を”B2”にすれば変換ができたのですが今度はオートフィルが使えなくなってしまいます。 なので、=HEX2BIN(B2)で変換できる方法か””をつかってもオートフィルで=HEX2BIN("C2")などにする方法を教えて下さい Excelは2007です。

  • BCDについて

    バイナリーデータをBCD変換したいのですが、C言語でどのようにプログラムを組んだらいいのかわからないので、だれか教えてください。

  • PICでのBCD変換について教えてください

    PIC初心者です。 PICと液晶表示器を使って車の電圧計(XX.Xで表示)を作ろうとおもっています。 AD変換して得た値(精度は求めていないので8ビット)をBCD変換して液晶表示器に送ればよいことはわかったのですが、肝心のBCD変換の概念?というか流れがよくわかりません。 いくつか参考になりそうなプログラムを見ました。ここでもQNo.4399051で同じような質問がありました。でも、たとえば、割って商に0x030を足すのはなぜなのか、理解できません。もしかして、アスキーコード表というものに合わせるためでしょうか? じっくりとプログラムを読めばよいことかもしれませんが、経験者の方よろしければ簡単にお教えください。よろしくおねがいいたします。

  • 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となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

  • 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となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

  • DOUBLE型の16進HEX文字列変換について

    12バイトのHEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)などを をいったん、10進に変換し、DOUBLE型の変数に設定し、 数値演算を行い 再度HEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)に変換を行いたいのですが、 変換の方法がわからず困っています。 HEX関数はLONGでしかおこなえないようで・・ すみませんが、ご教授いただけると助かります。 宜しくお願いいたします。

  • Hex関数

    こんにちは VBでちょっとしたことなんですが、自前の関数を作成するかどうかで悩んでいます。 nバイトの配列データ(dim xx() as Byte と宣言されている)を1バイトあたり2桁で表示したいのですが、Hex関数(あるいはHex$関数)では、0x00 の場合や0~9の場合、"0"や1桁になってしまうんですね。 もし組み込み関数で1バイトを2桁16進数表示できる変換関数があれば、自前のものより高速だし楽だと思い、迷ってます。 「そんなものはないので自分で作れ」とか「こんなのあるよ」とか教えてください。お願いします。

  • BCDコードの計算

    BCDコード(2進化10進符号)の100000110110は10進数で幾らか。 この問題がわかりませんどなたか教えてください。お願いします。

  • シーケンサー入力で装置でよくBCDコード1248と言いますが。

    シーケンサー入力で装置でよくBCDコード1248と言いますが。 シーケンサーやカウンターの入力でよく1248(いち に よん ぱ)と言いますが、これはBCDコードを言っていると思います。  BCDコードでは2進法の0を0000で表記する為、最大16通りの組み合わせができると考えればよいのでしょうか? また何故制御機器で入力を言う場合1248と呼ぶのでしょうか?  よろしく解説お願いします。