tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^8: Double型のアスキー変換について
投稿日: 2011/07/04(Mon) 10:43
投稿者魔界の仮面弁士
>     Dim bytDatas() As Byte
datas という英単語はありません。data 自体が複数形ですよ(単数形は datum)。
# 集合名詞として、data を単数的に扱う事も多いですけれども。


>     dblValue = 65.0
>         bytDatas(0):0
>         bytDatas(1):0
>         bytDatas(2):0
>         bytDatas(3):0
>         bytDatas(4):0
>         bytDatas(5):64
>         bytDatas(6):80
>         bytDatas(7):64
Double 65.0 の内部バイナリ表現が、
 00,00,00,00,00,40,50,40
となる理由ですが、この内訳は、以下のようになっています。


まず、65.0を2進小数で表すと「1000001.00000……」となります。

浮動小数点型というのは、整数部が 1 な小数として表されており、その場合の
「符号」「小数点位置」「小数部のデータ」を管理するというデータ形式です。

符号は今回「+」、小数値は、小数点桁位置は6桁シフトさせた「1.00000100000……」です。

そして小数点位置(仮数部)は、右シフトか左シフトかの符号調整を行う関係上、
Single なら 127、Double なら 1023 という値という値をバイアスした値です。
今回は、Double 型の 6桁を表すため、実際には『1029』という値で格納します。


続いて、この『+』『1029』『.00000100000』の部分をバイナリ化していきましょう。

符号部は Double では 1bit。「+」なので『0』で表します。
仮数部は Double では 11bit。「1029」の2進数表現なので『10000000101』です。
指数部は Double では 52bit。「.00000100000……」を 52 桁で表して
『0000010000000000000000000000000000000000000000000000』です。

これら符号部、仮数部、指数部を順に並べると、
[0][10000000101][0000010000000000000000000000000000000000000000000000]
となり、バイト単位で区切ると
[0100 0000],[0101 0000],[0100 0000],[0000 0000],[0000 0000],[0000 0000],[0000 0000],[0000 0000]
です。そしてこれが、「65.0」のバイナリダンプデータとなります。
16進数で表せば 40,50,40,00,00,00,00,00 ですし、
10進数で表せば 64,80,64,0,0,0,0,0 となるわけですね。

# 実際の並び順が逆なのは、Windows ではリトルエンディアンで管理されるためです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。