質問: X Debug.Print Y.S End Sub このコードを実行するとデバッグウィンドウに 1234.567 と表示されます。 このコードではいったい何が起こっているのでしょうか? X.Bとして4つの配列変数が用意され、それがY.Sという配列ではない通常の変数に代入されているのはわかるのですが、 どうして結果が1234.567になるのかわかりません。
回答: LSetでユーザ定義型をコピーすると単にメモリ領域がコピーされます。 つまり4つのバイトを浮動小数(Single)として解釈するという意味になります。 32ビットの浮動小数は 符号1ビット、指数部8ビット(127のゲタ履き)、仮数部23ビット(最左のビット省略) の様に表されます。 つまり、 1234.567 は、 2進数で表現すると 01000100 10011010 01010010 00100101 で、コレをバイト区切りで 10進数にすると 68 154 82 37 になります。 01000100 10011010 01010010 00100101 を先程の、浮動小数の定義にそって区切るとすると 0 10001001 (1:省略されているビット)00110100101001000100101 になります。 先頭の0は、符号が正 次の 10001001は、137で、137-127で、ビットが10ビット左シフトされることを示しています 仮数部 00110100101001000100101 は、 1.00110100101001000100101 で、この小数点位置を10桁ずらすと 10011010010.1001000100101 小数でない部分 10011010010 は 10進で1234 小数部は、 1001000100101 1/2+1/16+1/256+1/2048+1/8192 =0.5670166015625 ということになります