C Language/Programming Course
2장 연산자(7부 삼항 조건 연산자 및 캐스트 연산자, 괄호연산자) 첫번째 시간
행복하면
2009. 6. 29. 00:28
2장 연산자
7부 삼항 조건 연산자 및 캐스트 연산자 괄호 연산자
7부 삼항 조건 연산자 및 캐스트 연산자 괄호 연산자
이번시간에는 삼항 조건 연산자와 캐스트 연산자와 괄호 연산자에 대해서 알아 보도록
하겠습니다.
그 중에서 먼저 삼항 조건 연산자라는 것에 대해서 알아 보도록 하겠습니다.
삼항연산자는 조건연산자라고도 하는데 이 연산자는 뒤에서 배울
제어문과 유사한 것입니다.
형태는
(조건식)? 참 : 거짓;
입니다.
해석을 하자면 조건식이 참이면 참을 거짓이면 거짓을 가르킵니다.
예를 들어
(5 < 6) ? 10 : 20;
이라고 한다면 조건식의 결과가 참이기 때문에 10을 가르키게 됩니다.
그럼 (5 > 6) ? 10 : 20;
이라면, 조건식의 결과가 거짓이기 때문에 20을 가르키게 되겠죠!?
이것이 삼항연산자입니다.
이 것만 알고 계신다면 충분하게 삼항 연산자를 사용하실 수 있겠습니다.
하지만 삼항 연산자는 앞에서 말했듯이 제어문과 비슷하기 때문에
잘 사용이 안되고 보통 제어문을 사용하게 됩니다.
그리고 캐스트 연산자를 해 보겠습니다.
정의를 보면
캐스트 연산자는 자료형을 바꿔 주는 연산자 입니다.
이 연산자는 예를 보면서 하는 것이 이해하기가 빠를 겁니다.
예를 보면
int a = 5;
int b = 2;
double c;
c = a / b;
이런 소스가 있습니다.
여기에서 c의 값은 2가 출력이 되게 됩니다.
직접계산을 하면 2.5가 되야 되는데 왜 2가 출력이 될까요~?!
그 이유는 a와 b가 int형이기 때문에 소수의 값은 가질 수 없습니다.
a와 b가 계산을 하게 되면 일단 c에 들어 가기 전에 먼저 결과 값을
가지게 됩니다. 그 결과 값도 a나 b처럼 int형을 가지기 때문에
소수점 자리는 무시하게 됩니다. 그래서 결과가 2가 나오게 됩니다.
이 결과 2가 c에 들어가서 2.000000이라는 결과를 출력 하게 됩니다.
그럼 2.500000을 출력 시키기 위해서는 어떻게 해야 하는가?
a나 b 둘중에 하나를 double으로 변환을 시키는 겁니다.
그럼 결과가 자료형이 큰 쪽을 따르기 때문에 2.500000 값을 가질 수
있게 됩니다.
바로 이때 캐스트 연산자를 사용하게 됩니다.
캐스트 연산자는 (자료형) 형태로 바꿀 변수 앞에 써 주면 됩니다.
그럼 c = a / b;을 캐스트 연산자를 시켜 주면
c = (double)a / b;
c = a / (double) b;
c = (double)a / (double) b;
이 세개 중에 한개를 사용하면 됩니다.
이렇게 사용하는 것이 캐스트 연산자 입니다.
보통 괄호 안에 위에 처럼 자료형이 들어 가 있으면 전부 캐스트 연산자를
사용한 것이라 생각하시면 됩니다.
지금은 그렇게 많은 사용을 하지 않겠지만,
후반부에 가면서 실력이 늘어 가면서 캐스트 연산자 사용량이
늘어 날겁니다.
마지막으로 괄호 연산자를 알아 보겠습니다.
괄호연산자는 뭐 특별한 것이 있는 것이 아니라, 우리가 일반적으로 사용하는
괄호를 말하는 겁니다.
수학시간에 식이 있으면 괄호 안에 있는 식부터 먼저 연산 할때 사용하는
바로 그 괄호 연산자 입니다.
즉 연산자 우선순위를 바꿀때 사용하는 연산자 라고 생각하시면 됩니다..
이것이 바로 괄호 연산자 입니다.
예를 보면,
int a = 5;
int b = 8;
int c = 6;
int d = 9;
int e;
e = a*b+c*d;
이런 식이 있다면, a와 b가 먼저 계산이 되고 그 다음 c와 d가 계산이 되고
이 두개의 결과가 더해지는 식입니다.
하지만 b와 c가 먼저 계산을 하고 싶을때 사용하는 것이 괄호 연산자 입니다.
e = a*(b+c)*d;
이렇게 하면 b와 c가 먼저 계산이 되겠죠!?
이렇게 사용하면 됩니다.
다음 시간에는 연산자 우선순위에 대해서 간단하게 알아 보도록 하겠습니다.
삼항 연산과 캐스트 연산과 괄호 연산을 사용한 예제
===========================================
#include <stdio.h>
int main()
{
int integer1 = 5;
int integer2 = 6;
int integer3 = 7;
int integer4 = 8;
int ret1;
double ret2, ret2_1;
int ret3, ret3_1;
ret1 = (integer1 > integer2) ? 1 : 2;
ret2 = integer3 / integer1;
ret2_1 = (double) integer3 / integer1;
ret3 = integer1 * integer2 + integer3 * integer4;
ret3_1 = integer1 * (integer2 + integer3) * integer4;
printf("결과 : %d\n", ret1);
printf("결과 : %d\n", ret2);
printf("결과 : %d\n", ret2_1);
printf("결과 : %d\n", ret3);
printf("결과 : %d\n", ret3_1);
return 0;
}
===========================================