VB.NET对C#整数除法 [英] VB.NET vs C# integer division

查看:220
本文介绍了VB.NET对C#整数除法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人在乎解释为什么这两件code表现出不同的结果?

VB.NET V4.0

 昏暗数p作为整数= 16
昏暗我为整数= 10
昏暗y为整数= P / I
//结果:2
 

C#4.0版

  INT P = 16;
INT I = 10;
INT Y = P / I;
//结果:1
 

解决方案

当你看看IL-code这两个片段产生,你就会意识到,VB.NET首先将整数值双打,应用划分,然后舍入结果之前,它的转换回INT32并存储在年。

C#确实没有了。

VB.NET IL code:

  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:拨打System.Math.Round
IL_0010:conv.ovf.i4
IL_0011:stloc.2
IL_0012:ldloc.2
IL_0013:打电话的System.Console.WriteLine
 

C#IL code:

  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:打电话的System.Console.WriteLine
 

在VB中的正确的整数除法需要向后斜线:P \我

Anyone care to explain why these two pieces of code exhibit different results?

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

解决方案

When you look at the IL-code that those two snippets produce, you'll realize that VB.NET first converts the integer values to doubles, applies the division and then rounds the result before it's converted back to int32 and stored in y.

C# does none of that.

VB.NET IL Code:

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 Code:

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

The "proper" integer division in VB needs a backwards slash: p \ i

这篇关于VB.NET对C#整数除法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆