ternary, 3항 연산자는 자주 사용되지는 않지만, 복잡한 계산식이나 조건 처리, 비교 구조를 매우 간단히 표현할 수 있게 해준다.
3개의 요소로 이루어지는 3항(ternary) 연산자의 형태:
조건식 ? (참일 때의 값) : (거짓일 때의 값)
조건식의 계산 결과가 참인 경우에는
':' 왼쪽의 값 또는 식으로 바뀌고,
거짓인 경우에는 ':' 오른쪽의 값 또는 식으로 바뀐다.
예를 들어,
123 > 456 ? 0 : 1
과 같은 표현식은 123 > 456 의 비교연산 결과가 거짓이므로 1이 된다.
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d",&a, &b);
printf("%d", a>b ? a:b);` //두 값 중 큰 값이 출력된다.
return 0;
}
3항 연산자를 활용해 3개의 정수 중 가장 작은 값을 출력하는 코드를 짠다면 아래와 같이 코딩할 수 있다.
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d%d%c", &a, &b, &c); //3개의 정수가 공백으로 구분되어 입력된다.
printf("%d\n", a<b ? (a<c?a:c) : (b<c?b:c) );
/*
1. a<b ? ➡ a 와 b의 크기를 비교하여, a 가 작으면 2번으로 가고, b 가 작으면 3번으로 감
2. (a<c?a:c) ➡ a 와 c 중 작은 값을 비교해 출력하거나
3. (b<c?b:c) ➡ b 와 c 중 작은 값을 비교해 출력함.
*/
return 0;
}
아래와 같이 짤 수도 있다.
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d",&a, &b, &c);
printf("%d",(a<b?a:b)<c?(a<b?a:b):c);
/*
1. (a<b?a:b)<c? ➡ a와 b 중 작은 값을 c 와 비교해서
2. (a<b?a:b):c ➡ 다시 a와 b 중 작은 값을 출력하거나, c를 출력함
*/
return 0;
}