1. ホーム
  2. c#

[解決済み] VB.NETとC#の整数の割り算について【重複

2023-08-16 21:51:57

質問

この2つのコードが異なる結果を示す理由を説明してくれる人はいますか?

VB.NET v4.0

Dim p As Integer = 16
Dim i As Integer = 10
Dim y As Integer = p / i
//Result: 2

C# v4.0

int p = 16;
int i = 10;
int y = p / i;
//Result: 1

どのように解決するのですか?

この2つのスニペットが生成するILコードを見ると、VB.NETはまず整数値をdoubleに変換し、除算を適用して結果を丸め、int32に戻してyに格納していることが分かります。

C# はそのいずれも行いません。

VB.NET ILコードです。

IL_0000:  ldc.i4.s    10 
IL_0002:  stloc.1     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.0     
IL_0006:  ldloc.1     
IL_0007:  conv.r8     
IL_0008:  ldloc.0     
IL_0009:  conv.r8     
IL_000A:  div         
IL_000B:  call        System.Math.Round
IL_0010:  conv.ovf.i4 
IL_0011:  stloc.2     
IL_0012:  ldloc.2     
IL_0013:  call        System.Console.WriteLine

C#のILコードです。

IL_0000:  ldc.i4.s    10 
IL_0002:  stloc.0     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.1     
IL_0006:  ldloc.0     
IL_0007:  ldloc.1     
IL_0008:  div         
IL_0009:  stloc.2     
IL_000A:  ldloc.2     
IL_000B:  call        System.Console.WriteLine

VBでの整数の割り算は、バックスラッシュが必要です。