#include <iostream>
using namespace std;
int main()
{
{
// 연산자의 우선 순위
// "/" 연산자가 "-" 연산자보다 우선 순위가 높아 먼저 계산 된다.
int num = 40 - 32 / 2; // 32 / 2 먼저 계산 -> 16, 40 - 16 -> 24
cout << num << endl; // 24
}
{
// 연산자의 결합성
// 우선순위가 같은 연산자들끼리는 결합성의 방향에 따라 계산을 한다.
// 8 / 2 / 2 * 2 -> 나눗셈, 곱셈은 우선순위가 같고 결합성은 왼쪽에서 오른쪽
// 4 - 6 + 2 + 8 / 2 / 2 * 2; -> (8 / 2) / 2 -> 2 * 2 -> 4, 4 - 6 + 2 + 4
int num = 4 - 6 + 2 + 8 / 2 / 2 * 2; // -2 + 2 + 4 -> 4
cout << num << endl; // 4
int a, b, c;
// 할당 연산자는 결합성이 오른쪽에서 왼쪽. 할당 후 할당 된 값을 반환한다.
a = b = c = 10;
cout << a << endl; // 10
cout << b << endl; // 10
cout << c << endl; // 10
}
{
// 선언문에서 '=' 는 할당 연산자가 아님
int num = 10; // 변수 선언 및 초기화
cout << num << endl; // 10
}
{
// 정수형 리터럴에 '-'를 붙임.
// 뺄셈의 '-'는 이항 연산자
// 수의 부호를 바꿔주는 '-'는 단항 연산자
cout << -1 << endl; // -1
cout << +-+-+-1 << endl; // -1
}
{
int num = 0;
// 전위 증가 연산자. 해당 변수에 1을 더하고 더한 값을 반환
cout << ++num << endl; // 1
// 전위 감소 연산자. 해당 변수에 1을 빼고 뺀 값을 반환
cout << --num << endl; // 0
// 후위 증가 연산자. 해당 변수에 1을 더하고 더하지 않은 원래 값을 반환
cout << num++ << endl; // 0
// 후위 감소 연산자. 해당 변수에 1을 빼고 빼지 않은 원래 값을 반환
cout << num-- << endl; // 1
cout << num << endl; // 0
}
{
// 복합 할당 연산자
int num = 10;
// 좌항의 변수에 우항의 값을 더한 결과를 좌항에 할당
num += 5;
cout << num << endl; // 15
// 좌항의 변수에 우항의 값을 뺀 결과를 좌항에 할당
num -= 5;
cout << num << endl; // 10
// 좌항의 변수에 우항의 값을 곱한 결과를 좌항에 할당
num *= 5;
cout << num << endl; // 50
// 좌항의 변수를 우항의 값으로 나눈 결과를 좌항에 할당
num /= 5;
cout << num << endl; // 10
// 좌항의 변수를 우항의 값으로 나누고 남은 나머지를 좌항에 할당
num %= 5;
cout << num << endl; // 0
}
{
// 정의되지 않은 행동
// 시퀀스 포인트 이전에 같은 변수를 변경하는 행동은 주의
// 세미콜론은 대표적인 시퀀스 포인트
int num = 10;
cout << ++num + num++ << endl; // 정의되지 않은 행동
cout << num << endl; // 결과는 컴파일러에 따라 다를 수 있음
printf("%d %d\n", ++num, ++num); // 정의되지 않은 행동
printf("%d\n", num); // 결과는 컴파일러에 따라 다를 수 있음
}
}
연산자 | 설명 | 우선순위 | 결합성 |
---|---|---|---|
* / % | 곱셈, 나눗셈, 나머지 | 높음 | 왼쪽 |
+ - | 덧셈, 뺄셈 | 중간 | 왼쪽 |
= | 할당 | 낮음 | 오른쪽 |
연산자 | 설명 |
---|---|
+= | 좌항에 우항을 더한 결과를 좌항에 할당 |
-= | 좌항에 우항을 뺀 결과를 좌항에 할당 |
*= | 좌항에 우항을 곱한 결과를 좌항에 할당 |
/= | 좌항을 우항으로 나눈 결과를 좌항에 할당 |
%= | 좌항을 우항으로 나눈 나머지를 좌항에 할당 |
연산자 | 설명 |
---|---|
++ | 증가 연산자 (전위, 후위) |
-- | 감소 연산자 (전위, 후위) |
- | 부호 변경 |
cout << ++num + num++ << endl;
는 컴파일러마다 다른 결과를 초래할 수 있습니다.