タイトル | : Re^8: Double型のアスキー変換について |
記事No | : 10554 |
投稿日 | : 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 ではリトルエンディアンで管理されるためです。
|