任何人都在解释为什么这两段代码会有不同的结果?
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
答案 0 :(得分:83)
当您查看这两个片段产生的IL代码时,您将意识到VB.NET首先将整数值转换为双精度,应用除法,然后在将结果转换回int32之前对结果进行舍入并存储在收率
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
答案 1 :(得分:78)
在VB中,要执行 整数 除法,请反斜杠:
Dim y As Integer = p \ i
否则它会扩展为除法的浮点数,然后在分配到int
后进行舍入后强制返回y
。
答案 2 :(得分:16)
VB.NET integer division operator为\
,而不是/
。
答案 3 :(得分:8)
“C#和VB中的分区执行方式不同.C#与其他基于C的语言一样,当两个操作数都是整数文字或整数变量(或整数常量)时截断分割结果。在VB中,必须使用整数除法运算符(\
)得到类似的结果。“
答案 4 :(得分:-4)
在C#中,当分子和分母都是整数时,整数除法应用/
。然而,在VB.Net'/'中导致浮点divsion,因此对于VB.Net中的整数除法使用\
。看看这个MSDN post。