본문 바로가기
기계공학부 시절의 기록/C++일기

(진행중)3.1~3.4 연산자

by juhyeonglee 2021. 10. 12.
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
반응형

댓글