• ベストアンサー

VB6.0で小数10進数を16進数に変換したい

仕事に生かせるようになる為、VB6.0を勉強しています。 今仕事でディジタル通信を用いて信号のやり取りをするような機器を使っているのですが、例えば小数じゃないですけど、10進数の「1」は16進数に変換すると「3F800000」となるみたいです。 どのようなプログラムを作ればこのような変換が行えるのでしょうか? 分かる方いらっしゃいましたら教えてください。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

http://www.hc.uec.ac.jp/~nagai/ip/note/note7.html の解説を手掛かりに解説してみます。 私も勉強させてもらいました。やっと納得と言うところです。 左からのビット(列。24ビット。Realからくる。)を考える。 第1--符号(サイン)を表す1ビット。正は0、負は1     この質問に出てくる、1は正で0。 第2ビットから第9ビットまで8ビット--指数部。 Exponent部。     1は1.0×2の0乗であるから0000000    0であるはずだが、バイアス(Bias。#2の    ご回答に出てくる。)オッフセット値127=2    進数で1111111を加えるので、11111    11が指数部となります。 第10ビットから第24ビットまで---仮数部。 Mantissaと言う。仮数部は、1は2の1乗だから1のはずが、「仮数は先頭の1を省略し、」(上記サイトより学んだ)で0になる。 以上サインビット+指数ビット+仮数ビットを寄せ集めると0.01111111.000000000000000(.は区切りを判りやすく入れたもの)となり、左から16進のため4ビットずつとって 0011=3 1111=F 1000=8 0000=0以下同じ0. で「3F800000」となります。 ●「Baiasが127」と「仮数は先頭の1を省略し、」 の意味は、なんとなく掴めるのですが、知っていないと どうにもならないところですね。 VBレベルでこの変換をするのは無意味(必要性はない)と思いますが、敢えてなさるのなら、上記ロジックを参考にしてVBで実現されては。Real型が出てくるのはPascal系か。浮動小数点数=Float型+Real型です。

toyomi2128
質問者

お礼

回答ありがとうございます。 内容少し難しいですが、よく考えれば理解できそうです。 ありがとうございました。

その他の回答 (3)

  • tttt23
  • ベストアンサー率25% (76/303)
回答No.3

> real型で表すとと3F800000になります。 分かりました。これは、例えば real 型変数 A があって、 A = 1.0 とすると 1.0 が自動的に内部表現のデータに変換されて A に入れられるのですが、その内部表現のデータを 16 進数であらわすと 3F800000 になるということです。 計算機や言語が違うと 1.0 は 3F800000 以外のデータになることもあります。 普通 1.0 が 3F800000 になると言うことは覚えておかなくてもよくて、1.0 は 1.0 と思っていればいいと思うのですが。何をしたいのでしょうか。

toyomi2128
質問者

お礼

回答ありがとうございます。 >普通 1.0 が 3F800000 になると言うことは覚えておかな>くてもよくて、1.0 は 1.0 と思っていればいいと思うの >ですが。何をしたいのでしょうか。 私も分かりません(^^;。ただこういう表し方で行っているのでそれに合わさないといけないので。今更の変更が効かないので・・・まそういうわけです。 ありがとうございました。

noname#74310
noname#74310
回答No.2

Bias=127ですから378(0x7f)になります。 1ビット省略されているので変に感じます。         Sign Exponent Fraction Bias Single Precision 1bit 8bit 23bit 127

参考URL:
http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html
toyomi2128
質問者

お礼

回答ありがとうございます。 すみません。内容が私には高等すぎてよく分かりません。 また補足いただければありがたいです。 よろしくお願いします。

  • tttt23
  • ベストアンサー率25% (76/303)
回答No.1

普通 10 進数の 1 は 16 進数でも 1 なんですけど、なぜ 3F800000 になるのでしょう。 10 進数の 10 や 100 はどうなるのですか。

toyomi2128
質問者

補足

回答ありがとうございます。補足します(表現が間違っているかもしれませんがご容赦ください)。 確かに10進数の1は16進数でも1です。がこれは型がint型の場合で、real型で表すとと3F800000になります。 10進数の10や100はどうなるか覚えていません。おぼろげですが100は42C00000になったと思います。

関連するQ&A