VB.NET与C#整数除法

时间:2011-05-16 05:49:03

标签: c# .net vb.net operators division

任何人都在解释为什么这两段代码会有不同的结果?

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

5 个答案:

答案 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中,必须使用整数除法运算符(\)得到类似的结果。“

Source

答案 4 :(得分:-4)

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