2012-07-22 7 views
-5

나는 예상하지 못한 간단한 코드 조각이 있습니다. 이 코드의 문제점은 무엇입니까?운영 순서 간단한 두뇌 티저

int value1 = (int).5*100; 

이것은 꽤 쉽지만 루프를 통해 좋은 순간을 보게됩니다. 물론, 대답은 사소하고 이미 알려져 있습니다. 그러나 누군가 생각하면 재미 있을지도 모른다고 생각했습니다.

올바른 해결책을 제시하고 이유를 설명하는 첫 번째 사람에게 신용장을 제공합니다.

+3

'예상하지 못한 간단한 코드 조각이 있습니다.' 글쎄, 당신이 커피를 만들기를 기대한다면 커피 양조 서브 루틴을 연결해야합니다. 그렇지 않으면 작동하지 않을 것입니다. –

+1

@KooKiz 통사론을 잊지 마라! –

+0

커피 외에 : 스팸이 아니십니까? –

답변

10

Firsty 그러므로 그것은 (0 * 100) 0 결과 100하여 곱하고 0 초래하는 int.5에 캐스트. 당신은 당신이 괄호를 사용할 필요가 다음 50을 것으로 예상하는 경우

(그래서 곱셈, 다음 캐스트를 입력 먼저 간다) :

int value1 = (int)(.5*100); 

덜보다 더 많은 괄호를 넣어 항상 더 나은, 그것은 아무것도 비용이없고, 그것은 가독성과 이해력을 증가시킵니다.

MSDN Library : Operator precedence and associativity.

16

"무엇이 잘못 되었나요?"괄호 사용이 불충분하고, (인간의 눈이 아닌 컴파일러를 만족시키는) 바보 선행 규칙을 암기하고 암송하도록 강요하므로 작성하기가 어려우며 유지 관리가 더 어려워집니다.

조금이라도 의심스러운 경우 괄호를 추가하십시오. 그들이 필요하지 않더라도. 그렇다면 이것은 문제가 아닙니다. 그리고 당신은 무엇이든 암기 할 필요가 없습니다!

코드가 하나 같이 쓸 경우 :

((int)0.5)*100 

나 :

(int)(0.5*100) 

는 다음 나는 질문이 이제까지 필요하다 의심 :)

그것은 우선 순위와 관련이있다
+4

+1 "컴파일러를 만족시키기위한 것이지, 사람의 눈을위한 것이 아닙니다". 나는 누군가의 코드를 읽을 때 선행 규칙에 대해 생각할 필요가 없다. **이제까지**. – Polynomial

3

캐스트의 우선 순위가 높기 때문에 곱셈 연산 전에 실행되므로 우선 순위를 변경하려면 괄호를 사용해야하고 다음과 같이 시도하십시오.

int value1 = (int)(.5 * 100);