ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (진행중)3.1~3.4 연산자
    C++일기 2021. 10. 12. 17:28
    728x90
    반응형

    3.1 연산자에는 우선순위(Operator precedence)가 있다.

    프로그래머들도 이를 다 외우고 있진 못함. 따라서 괄호 ()를 적극적으로 활용해 우선순위를 먼저 지정을 하는 편이다. 연산의 방향도 왼쪽에서 오른쪽, 오른쪽에서 왼쪽이 있다. =이 대표적인 오른쪽에서 왼쪽방향의 연산자이다.

    cpp operators wiki : https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

     

    3.2 산술연산자

    단항 연산자는 띄워쓰지 않는다.

    ex.

    int x = 1;

    int y = - x; (x)

    int y = -x;(o)

    컴파일러는 띄워쓰기를 무시하지만 사람이 읽을 때 혼란이 있을 수 있다.

     

    정수 나누기와 실수나누기가 다르다

    +=

    *=

    /=

    %=

    연산자들도 있다.

     

    3.3 증감연산자 : 많이쓰이고 쉬운데 실수가 많이 발생. 한번 볼 때 잘보자.

    ++x 와 x++의 차이점(중요) 

    먼저 +1 연산을 x에 대입 / 나중에 대입

    *주의사항 : 증감연산자는 단순하게 사용하자. func(x,x++), x = x++ 와 같이 함수 혹은 연산자 관계에 있으면 컴파일러에 따라서 결과가 다를 수 있다. 그냥 x++; 정도로만 활용.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
     
    int main()
    {
        using namespace std;
        int x = 0, y = 0;
        cout << ++<< " " << --<< endl// 1 -1
        cout << x++ << " " << y-- << endl// 1 -1
        cout << x << " " << y << endl// 2 -2
     
        return 0;    
    }
    cs

     

    3.4 sizeof, 쉼표연산자, 조건부연산자

    sizeof operator

    사용자가 만든 자료형의 크기를 보고 싶을 때도 sizeof가 쓰임.

    매우 활용도가 높다.

    * sizeof는 함수가 아닌 연산자다.

     

    쉼표연산자(comma operator)

     z = (++x, ++y) 의 의미 : 쉼표 앞을 연산하고 쉼표 뒤를 연산하여 쉼표 뒤값을 z에 대입.

    ++x;

    ++y;

    z = y;

     

    굳이 comma 연산자를 쓰기보다 풀어서쓰는 것이 좋다. 

    하지만, 실전 for문을 만들 때 많이 유용하다.

     

    * 쉼표(,)는 연산자보다는 구분기호로 더 많이 쓰인다. 

    ex. 함수 : func(a, b)

    ex. 변수 선언 : int a = 1, b = 2;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    int main()
    {
        using namespace std;
        int x = 0, y = 1, z = 0// , : 연산자가 아닌 구분기호
        z = x, y; // , : 연산자
        cout << z << endl// 0
     
        z = (x, y);
        cout << z << endl// 1
        return 0;    
    }
    cs

    line 7 과 10을 비교했을 때, 7의 결과가 0이 나오는 이유는 =연산자가 ,연산자보다 우선순위가 더 높기 때문이다. 

    z = x, y; 는 (z = x), y;와 같다.

    line 10의 경우 ()로 ,연산과정에 우선순위를 주기 때문에 y값이 z에 대입된다. 

     

    아래의 코드를 통해 증감연산자와 쉼표연산자를 함께 생각해볼 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <iostream>
     
    int main()
    {
        using namespace std;
     
        int a = 1, b = 10;
        int z = 0;
     
        z = (a, a + b); 
        cout << "a : " << a << " " << "b : " << b << endl// 1 10
        cout << z << endl;// 11
     
        z = (a--, a + b); 
        cout << "a : " << a << " " << "b : " << b << endl;// 0 10
        cout << z << endl;// 10
     
        z = (a++, a + (--b));
        cout << "a : " << a << " " << "b : " << b << endl;// 1 9
        cout << z << endl;// 10
     
        z = (--a, a + --b);
        cout << "a : " << a << " " << "b : " << b << endl;// 0 8
        cout << z << endl;// 8
     
        return 0;    
    }
    cs

     

    conditional operator 조건연산자

     

     

    13:32

    https://www.youtube.com/watch?v=-tEqIijDGHk 

     

     

    728x90
    반응형

    'C++일기' 카테고리의 다른 글

    (진행중)3.1~3.4 연산자  (0) 2021.10.12
    클래스 상속, 생성자 정의  (0) 2021.10.05
    상수 : 리터럴상수, 심볼릭상수  (0) 2021.05.07
    2.7 문자형 char  (0) 2021.05.06
    2.6 불리언 자료형  (0) 2021.05.05
    2.3 ~ 2.5 고정너비정수, void, double, 절단오차  (0) 2021.05.05

    댓글 0

Designed by Tistory.