首页 文章

VB.NET与C#整数除法[重复]

提问于
浏览
80

这个问题在这里已有答案:

任何人都在关心解释为什么这两段代码表现出不同的结果?

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 回答

  • 8

    当您查看这两个片段产生的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

  • 16

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

    Dim y As Integer = p \ i
    

    否则它会扩展为浮点进行除法,然后在转换为 y 之后强制回到 int .

  • 83

    VB.NET integer division operator\ ,而不是 / .

  • 78

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

    Source

  • -4

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

相关问题