developer tip

VB.NET 대 C # 정수 나누기

optionbox 2020. 10. 7. 07:34
반응형

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이 먼저 정수 값을 double로 변환하고 나눗셈을 적용한 다음 결과를 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


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

Dim y As Integer = p \ i

그렇지 않으면 나눗셈을 위해 부동 소수점으로 확장 된 다음에 int할당되면 반올림 후 강제로 다시 지정됩니다 y.


VB.NET 정수 나눗셈 연산자 이다 \하지 /.


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

출처


C #에서는 /분자와 분모가 모두 정수인 경우 정수 나누기가 적용됩니다 . 반면 VB.Net에서 '/'는 부동 소수점 분할을 발생 시키므로 VB.Net의 정수 분할에는 \. MSDN 게시물을 살펴보십시오 .

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

반응형