programing

VB.NET 대 C# 정수 나눗셈

stoneblock 2023. 5. 29. 09:15

VB.NET 대 C# 정수 나눗셈

이 두 코드가 왜 다른 결과를 나타내는지 설명할 사람?

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

이 두 스니펫이 생성하는 IL 코드를 보면 VB.NET이 정수 값을 2배로 변환하고 나눗셈을 적용한 다음 다시 int32로 변환하여 y에 저장하기 전에 결과를 반올림한다는 것을 알 수 있습니다.

C#은 그런 일을 하지 않습니다.

VB.NETIL 코드:

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

VB에서 정수 나눗셈을 수행하려면 슬래시를 반대로 누릅니다.

Dim y As Integer = p \ i

그렇지 않으면 분할에 대한 부동 소수점으로 확장된 다음 강제로 다시int할당된 경우 반올림 후y.

VB.NET 정수 나눗셈 연산자는\,것은 아니다./.

"분할은 C#과 VB에서 다르게 수행됩니다.C#은 다른 C 기반 언어와 마찬가지로 두 피연산자가 정수 리터럴 또는 정수 변수(또는 정수 상수)일 때 분할 결과를 잘라냅니다.VB에서는 정수 나눗셈 연산자(\) 유사한 결과를 얻을 수 있습니다."

원천

C#에서 정수 나눗셈은 다음과 같이 적용됩니다./분자와 분모가 모두 정수일 때.VB에서는.Net '/'은(는) 부동 소수점 분할을 생성하므로 VB의 정수 분할에 사용됩니다.순이용\이 MSDN 게시물을 보세요.

언급URL : https://stackoverflow.com/questions/6013626/vb-net-vs-c-sharp-integer-division