VB.NET vs c # division entière [dupliquer]
cette question a déjà une réponse ici:
- pourquoi les opérateurs de la division (/) se comportent-ils différemment en VB.NET et C#? 5 réponses
Quelqu'un peut expliquer pourquoi ces deux morceaux de code montrent des résultats différents?
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 réponses
quand vous regardez le code IL que ces deux bribes produisent, vous réaliserez que VB.NET d'abord convertit les valeurs entières en doubles, applique la division et fait le tour du résultat avant qu'il ne soit converti en int32 et stocké en Y.
C# ne fait rien de tout cela.
VB.NET Code 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
Code 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
la division entière "correcte" dans VB a besoin d'une barre oblique à l'envers: p \ i
En VB, à faire integer division, la barre oblique inverse:
Dim y As Integer = p \ i
sinon, il est élargi à un point flottant pour la division, puis forcé de revenir à un int
après avoir arrondi quand il est assigné à y
.
"la Division est effectuée différemment en C# et VB. C#, comme d'autres langages basés sur C tronque le résultat de division lorsque les deux opérandes sont des entiers littéraux ou des variables entières (ou des constantes entières). Dans VB, vous devez utiliser l'opérateur de division entier ( \
) pour obtenir un résultat similaire."
En C#, de la division entière est appliquée avec /
lorsque le numérateur et le denomenator sont des nombres entiers. Considérant que, dans VB.Net ' / 'résulte en divsion flottante de point, donc pour la division entière dans VB.Net utilisez \
. Regardez ce MSDN post .