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 << ++x << " " << --y << 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
'기계공학부 시절의 기록 > C++일기' 카테고리의 다른 글
클래스 상속, 생성자 정의 (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 |
댓글