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
'programing' 카테고리의 다른 글
선택기가 null을 반환하는지 탐지하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
---|---|
Gitdiff는 하위 프로젝트가 더럽다고 말합니다. (0) | 2023.05.29 |
루비의 배열 슬라이싱: 비논리적인 행동에 대한 설명(Rubykoans.com 에서 제공) (0) | 2023.05.29 |
Xcode에서 경고를 억제하는 방법이 있습니까? (0) | 2023.05.24 |
현재 폴더 경로 가져오기 (0) | 2023.05.24 |