2013-04-13 4 views
1

안녕하세요. 시간 내 주셔서 대단히 감사합니다. 오디오 코딩 교과서의 문구 구문을 이해하는 데 문제가 있습니다. 한 예로, 이와 같이가는 인쇄 기능이 있습니다.삼항 연산자의 사용 : var? 12-var : 0

printf("%d semitones up or %d semitones down\n", interval, 
     interval ? 12-interval : 0); 

내가 이해할 수없는 부분은 조건부 연산자 또는 "?"입니다. 그것은 마치 "간격이 0, 간격 = 12 - 간격"과 같지 않은 것처럼 읽어야하지만 여기의 구문은 이상하게 보입니다. "; 다른 A = C는 B가 A = B를보다 C보다 큰 경우"

누군가가 날 지점 수

a = b > c ? b : c; 

: 나는 더처럼 문을 구체화되는 조건 연산자 사용 해요 이것에 대한 다른 참조로, 또는이 구문에 대해 더 자세히 설명해주십시오. 나는 비슷한 예를 찾을 수 없다.

답변

6

당신은 거의 맞지만 할당이 없습니다. "interval이 0이 아니면 printf 문에 12 - interval을 전달하고 그렇지 않으면 0"을 전달합니다. 일반적으로 삼항 연산자에서

은 다음과 같습니다 a, bc 모든 표현이

a ? b : c 

. a이 0이 아닌 것으로 평가되면 삼중 연산자는 b 인 것처럼 평가하고 a이 0으로 평가되면 이항 연산자의 결과는 c을 계산 한 결과입니다.

두 번째 예는 삼항 연산자와 대입 연산자의 조합입니다. 삼항 연산자 자체는 할당을 수행하지 않습니다.

+0

매우 명확합니다. 고맙습니다! – Pajama

-1

결과는 부울로 나타납니다. 정수가 부울 값으로 사용될 수있는 C의 경우 0 값은 false으로 간주되고 다른 값은 true으로 간주됩니다.

그래서, 귀하의 경우, interval ? 12-interval : 0는 의미 interval이 0이 아닌 경우는 true, 그렇지 않은 경우는, 0를 사용 12-interval를 사용합니다. 특별히 자세한 정보를 얻으려면 다음 번호로 다시 쓸 수 있습니다.

interval != 0 ? 12-interval : 0 
+1

-1 "유형으로서의 부울은 존재하지 않는다" –

+0

'_Bool' ('stdbool.h '를 통해'bool'로 사용 가능함)은 거의 15 년간 표준 C의 일부였습니다. –

+0

내 실수. 절대 들어 본 적이 없으며 결코 사용하지 않았습니다. 정보 주셔서 감사합니다. 나는 K & R을 사용한 정식 교육 만 받았고 이후에는 공식 C 교육을 전혀하지 않았습니다. 나는 나의 대답을 업데이트했다. –

관련 문제