반응형
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
반응형
'developer tip' 카테고리의 다른 글
| DIV 태그가 새 줄을 시작하지 않도록하려면 어떻게해야합니까? (0) | 2020.10.07 |
|---|---|
| iPhone SDK 4와 함께 Xcode 3.2.3 설치, "Base SDK 누락"발생, 다른 SDK를 볼 수 없음 (0) | 2020.10.07 |
| 로깅 사용 pprint 출력 인쇄 (0) | 2020.10.07 |
| T-SQL에서 datetime을 문자열로 변환하는 방법 (0) | 2020.10.07 |
| Webpack ProvidePlugin 대 외부? (0) | 2020.10.07 |