C Language/Programming Course

2장 연산자(7부 삼항 조건 연산자 및 캐스트 연산자, 괄호연산자) 첫번째 시간

행복하면 2009. 6. 29. 00:28

2장 연산자

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;
    }
===========================================