CASE2와 같은 몇 가지 계산 항목을 코딩했습니다. CASE1과 같은 코드를 리팩토링하여 정상적으로 작동합니다. CASE 2에는 암시 적 캐스트가 있지만 전체적인 이유는 확실하지 않습니다. 아래에서 정확히 무엇이 일어나는지 설명 할 수있는 사람은 누구입니까? CASE2의/2 다시 두배로 주조 5.0로 변환 int로 (5 + 6)을 주조 5 분할의 라운드를 일으키는 것을C#의 캐스팅/변환 int/double에 대한 설명
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia/2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6)/2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0)/2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6)/2.0;
제 추측이다.
사례 3과 사례 4도이 문제를 해결합니다.
부수적으로, 런타임에는 단 하나의 작업 만 수행됩니다. 나머지는 모두 컴파일러에 의해 수행됩니다. –
@Marc : 컴파일러는 'auxMedia'가 로컬이고 상수가 할당되어 있기 때문에 컴파일 타임에 전체적으로 case 1을 수행 할 수 없습니까? 또는 JIT에 엄격하게 적용되는 최적화입니까? –
@Michael - JIT에 맡길 것을 기대합니다. 그것을 대답하기 위해 당신은 다른 컴파일러 출력물을 볼 필요가 있습니다. –