본문 바로가기

Computer Engineering

[C] 0x05 연산자(Operator)

From Evernote:

[C] 0x05 연산자(Operator)

오늘은 C언어에서 연산에 대한 부분에 대해서 이야기해보자!!

연산자는 수학책에서 많이 본 + - * / 이런 녀석들인데 
C언어에서는 이런 연산자를 용도에 따라 구분을 해두었다.

= 산술연산자 =   (+ - * / %)
일반적으로 수학책에서 많이 본 부호들이닷 + - * / %
/ 와 % 에서 의아하게 생각할 수 있는데 각각 용도가 다르다
/ 는나눗셈을 했을때의 을 계산해주는 연산자이다.
%는나눗셈을 했을 때 나머지를 계산해주는 연산자이다.
=> 단 주의할 점은 실수는 %(나머지 연산자)를 사용하지 않는다.
왜냐하면 실수에서는 정수와 달리 소숫점아래자리까지 표현을 해주기 때문에
나머지라는 개념이 없다.

= 대입연산자 =   ( = )
a = b ;    // b값을 a에 저장하는 것이다.

= 복합 대입 연산자 =( += , -= ...)
a += b;    // a와 b를 더한 후 그 결과값을 a에 대입을 해주는 것이다.

= 증감연산자 =( ++ , -- )
: 저장된 데이터를 1 증가(감소) 시켜준다.
- 전치(Prefix) 연산 : ++a , --a
- 후지(Postfix) 연산 : a++, a--

전치는 연산 에 저장된 Data를 증가(감소) 시켜주고, 후치는 연산 에 저장된 Data를 증가(감소)시킨다.
=> 즉 변수값이 언제 변하는지 그 차이일 뿐이다.

ex)               a=5;
                    b= ++a + 3;
연산순서             1   2
a 값을 먼저 1증가(5->6)시켜준 뒤 6+3 을 계산한 값인 9를 b에 넣어준다. => 전치 연산
ex)               a=5;
                    b= a++ + 3;
연산순서              2  1
5 + 3 을 계산한 값 8을 b에 넣어준다. 그 뒤 a의 값을 1증가(5->6)시켜준다.

전치와 후치를 잘 이해했다면 아래의 퀴즈(?)를 한 번 풀어봅시당 ㅎㅎ. 프로그램으로 짜서 돌리면 반칙이에요 ㅋㅋ
그냥 방금전에 이해한 전치 연산과 후치 연산을 이용해서 머리로 계산을 해봅시다

Quiz) b값은 무엇일까요?
        a = 5;
        b = ++a + ++a;

=> 12 ? 13 ? 이라고 생각하십니까? 이렇게 생각했다면 땡!! 정답은 14입니다.
읭? 무슨소리? 라고 생각하는 분들을 위해 연산과정에 대해서 알아봅시다.

        b = ++a + ++a;
                1   3    2
=> 1,2 모두 전치 연산자라는 것을 확인할 수 있다. 그래서 3  보다 먼저 연산이 되는 것이다.
1 을 연산하면 5->6 이된다. 이 값이 현재 a 에 저장되어있는 것이다.
그리고 2 에 나온 a 는 같은 줄에 있다고 5->6이 되는 것은 아니다.
이미 1에서 a 값이 5-> 6으로 증가되었기 때문에 2에서는
증가된 a 값 6을  전치연산하는 것이다. 그 결과 6->7로 된 것이다.
지금 여기까지만 듣고 13 이겠구나 하고 생각할 수 있다. 하지만 중간에 값이 결정되는 것은 아니다.
그리고 1, 2 모두 동일한 a 값을 이야기 하는 것이다.
그러므로 1 , 2 전치연산 결과 7이라는 값이 들어간다.
그래서 3에서는  7 + 7 을 연산해서 b 값이 14가 되는 것이다.

(*정리* : ++a , a = a + 1 , a += 1 ) 모두 같은 연산이라는 것!!

= 관계(비교)연산자 =( < , > , <= , >= , == , != )
: 수치를 구하는 연산자가 아니라 True, False (논리)를 판별하는 연산자이다.
그리고 True = 1 // False = 0 이 된다. (참고로 False = 0 이다. 0을 제외한 모든 값은 True 로 판별된다는 사실)

= 논리연산자 =( &&(and) , ||(or) , !(not) )
:여러 개의 조건을 동시에 검사를 한다.

= 그 밖의 연산자 =

- sizeof() : 메모리의 크기를 byte 단위로 구하는 연산자

- 형변환(캐스트) 연산자 : DataType을 일시적으로 변환하는 연산자이다.
ex)           int a;
         double b;

         b = a;    // 자동형변환
          |      |
  double   int  // double은 8byte 공간 int는 4byte 공간이므로 int를 double에 넣을 수 있다.

 그렇다면 그 반대의 경우는?
         a = b;
          |     |
        int   double   // 4byte 공간인 int 에 8byte 크기를 가지는 double형 Data를 집어 넣는 것이다.
                            => Wanrnig이 발생한다. 즉, Error는 아니고 가능은 한 것이다.
작은공간에 큰 것을 집어 넣는 것이므로 Data 소실이 발생할 수 있다.

        b = ( double ) a;    //강제형변환

= 삼항연산자 =(조건 ? 참 : 거짓;)
: 위에 적어 둔 것 처럼 연산을 3개의 구문으로 처리하는 것이다.

ex)   int a = 5, b=2;
        a > b ? printf("a가 크네요") : printf("b가 크네요");
            |                      |                                  |
    해당 조건이             |                                 |
               참이면 a가 크네요 출력     거짓이면 b가 크네요 출력

        max = a > b ? a : b ;
        a 가 클경우 max = a;
        b 가 클경우 max = b;
      => 이렇게 사용할 수 도 있다.

Posted via email from zzackzack2's Space