본문 바로가기
C++/C++ 문법

C++ 연산자와 연산자 우선순위

by Sein_ 2025. 10. 13.
728x90

[Do it C++ 완전정복_ 77~94p]

연산자

  • 증감 연산자 (++, --)
    • 값을 1 증가하거나 감소시키는 연산자
    • 전위(prefix): ++a → 먼저 값을 증가시키고 다른 연산 수행
    • 후위(postfix): a++ → 먼저 다른 연산 수행 후 값 증가
int a = 5;
int b = ++a; // a=6, b=6
int c = a--; // a=5, c=6

 

  • 논리 연산자 (&&, ||, !)
    • 참/거짓을 판단할 때 사용하는 연산자
    • && → AND: 양쪽이 모두 참일 때 참
    • || → OR: 한쪽만 참이어도 참
    • ! → NOT: 참 ↔ 거짓 반전
bool x = true, y = false;
bool result = x && y; // false
result = x || y;      // true
result = !x;          // false

 

  • 2의 보수 구하는 방법 (음수를 이진수로 표현할 때)
    • 양수의 이진수 구함
    • 모든 비트를 반전(0↔1)
    • 1을 더함 (ex. 5 → 00000101, -5 → 11111011)

 

  • 단항 연산자
    • 값 하나에만 적용되는 연산자 : +, -, !, ~, ++, --, *(간접참조), &(주소)
    • 값 하나를 바꾸거나, 참조/주소를 얻거나, 부정/반전 수행
int a = 5;
int b = -a; // -5
int* ptr = &a; // 주소

 

  • 이항 연산자 표현식
    • 값 두 개를 사용해서 연산하는 연산자 : +, -, *, /, %, &&, ||, ==, < 등
    • 항이 2개 필요, 표현식 결과는 연산 결과
int a = 5, b = 3;
int c = a + b; // 8
bool flag = (a > b); // true

 

  • 비트 연산자 (&, |, ^, ~, <<, >>)
    • 정수의 비트 단위 연산
    • & → AND, | → OR, ^ → XOR, ~ → NOT
    • << → 왼쪽 시프트, >> → 오른쪽 시프트
int a = 5;  // 00000101
int b = 3;  // 00000011
int c = a & b; // 00000001 = 1
int d = a | b; // 00000111 = 7
int e = a ^ b; // 00000110 = 6
int f = ~a;    // 11111010 = -6 (2의 보수)
int g = a << 1; // 00001010 = 10
int h = a >> 1; // 00000010 = 2

 

연산자 우선순위

우선순위 연산자 설명 결합 방향
1 :: 범위 지정 연산자 좌 → 우
2 a++, a--, (), [], ->, ->*, type(a), type{a}, a(), a[], a.b, a->b 함수 호출, 배열 인덱싱, 멤버 접근, 타입 변환 등 왼 → 오
3 ++a, --a, +, -, !, ~, *, &, sizeof, alignof, typeid, noexcept, new, new[], delete, delete[], co_await 단항 연산자, 메모리 할당/해제, 예외 처리 등 오 → 왼
4 a.*b, a->*b 포인터 멤버 접근 왼 → 오
5 *, /, % 곱셈, 나눗셈, 나머지 왼 → 오
6 +, - 덧셈, 뺄셈 왼 → 오
7 <<, >> 비트 시프트 왼 → 오
8 <, <=, >, >= 비교 연산자 왼 → 오
9 ==, != 동등/부등 비교 왼 → 오
10 & 비트 AND 왼 → 오
11 ^ 비트 XOR 왼 → 오
12 ` ` 비트 OR
13 && 논리 AND 왼 → 오
14 `   `
15 ?: 조건(3항) 연산자 오른 → 왼
16 =, +=, -=, *=, /=, %= 등 대입 연산자 오른 → 왼
17 throw 예외 던지기 왼 → 오
18 , 콤마 연산자 왼 → 오

 

https://en.cppreference.com/w/cpp/language/operator_precedence.html

 

C++ Operator Precedence - cppreference.com

The following table lists the precedence and associativity of C++ operators. Operators are listed top to bottom, in descending precedence. a, b and c are operands. ↑ The operand of sizeof cannot be a C-style type cast: the expression sizeof (int) * p is

en.cppreference.com