• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6.0で、LSetの動作がわからない)

VB6.0で、LSetの動作がわからない

このQ&Aのポイント
  • VB6.0のLSetの動作についてわかりません。コードを実行するとデバッグウィンドウに「1234.567」と表示されるのですが、なぜこのような結果になるのか知りたいです。
  • VB6.0のLSetを使用して、X.B配列の値をY.S変数に代入しています。コードを実行すると、デバッグウィンドウに「1234.567」という結果が表示されますが、なぜこのような値になるのか理解できません。詳しい解説をお願いします。
  • VB6.0のLSetを使用したコードで、X.B配列の値をY.S変数に代入しています。コードを実行してデバッグウィンドウには「1234.567」と表示されますが、この結果がどのようにして得られるのか理解できません。詳しい説明をお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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 ということになります

tochanx
質問者

お礼

ありがとうございます・・・ここまで丁寧に教えていただきありがとうございます。