Max*_*ich 80 .net c# 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
Run Code Online (Sandbox Code Playgroud)
C#v4.0
int p = 16;
int i = 10;
int y = p / i;
//Result: 1
Run Code Online (Sandbox Code Playgroud)
Chr*_*ian 83
当您查看这两个片段产生的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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
VB中的"正确"整数除法需要向后斜杠:p\i
Mar*_*ell 78
在VB中,要进行整数除法,请反斜杠:
Dim y As Integer = p \ i
Run Code Online (Sandbox Code Playgroud)
否则它会扩展到浮点进行除法,然后int在分配时强制回到舍入后y.
| 归档时间: |
|
| 查看次数: |
11954 次 |
| 最近记录: |