[ネタ元]http://blogs.wankuma.com/nakap/archive/2008/07/15/149026.aspx
コメント欄でSingle型を使用した場合の除算の結果の型について少し疑問が出てきたので調べてみました。
以下のプログラムを作成し、ビルドします。
Module Module1
Sub Main()
Dim x As Integer = 1
Dim y As Single = 1.0F
Dim z As Integer = 1
Console.WriteLine((x / y).GetType())
Console.WriteLine((x / z).GetType())
End Sub
End Module
ビルドしたアセンブリをILDASMで開いてみます。
.method public static void Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// コード サイズ 50 (0x32)
.maxstack 2
.locals init ([0] int32 x,
[1] float32 y,
[2] int32 z)
IL_0000: ldc.i4.1
IL_0001: stloc.0
IL_0002: ldc.r4 1.
IL_0007: stloc.1
IL_0008: ldc.i4.1
IL_0009: stloc.2
IL_000a: ldloc.0
IL_000b: conv.r4
IL_000c: ldloc.1
IL_000d: div
IL_000e: box [mscorlib]System.Single
IL_0013: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0018: call void [mscorlib]System.Console::WriteLine(object)
IL_001d: ldloc.0
IL_001e: conv.r8
IL_001f: ldloc.2
IL_0020: conv.r8
IL_0021: div
IL_0022: box [mscorlib]System.Double
IL_0027: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_002c: call void [mscorlib]System.Console::WriteLine(object)
IL_0031: ret
} // end of method Module1::Main
整数型なのにDouble型に拡大変換されてない・・・?Single型に変換されてる・・・?
この実験方法が正しいのかわかりませんが、MSDNの[/演算子]に書かれてある内容と違っています。
細かなところですが、ドキュメントフィードバックにも投稿してありますので、何らかの返答を待ってみたいと思います。