VB.NET与C#整数除法

任何人都在意解释为什么这两个代码显示不同的结果?

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 

当你看这两个片段产生的IL代码时,你会意识到VB.NET首先将整数值转换为双精度值,然后应用除法运算,然后在将结果转换回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中“正确的”整数除法需要一个反斜杠:p \ i

在VB中,要做整数除法,反斜杠:

 Dim y As Integer = p \ i 

否则扩展为浮点数,然后在分配给y后强制回到int

VB.NET 整数除法运算符是\ ,不是/

“在C#和VB中执行不同的分区,C#和其他基于C的语言一样,当两个操作数都是整数或整型variables(或整数常量)时,分割结果会被截断,在VB中,必须使用整数除法运算符( \ )得到相似的结果。“

资源

在C#中,当分子和denomenator都是整数时,整数除法应用于/ 。 而在VB.Net'/'导致浮点divsion,所以在VB.Net使用\整数除法。 看看这个MSDN的post 。