본문 바로가기

C++

C++ 연산자

 

1. 연산자 우선순위

연산자 우선순위

각 연산자는 우선순위 동등한 우선순위 내에서는 왼항부터 우선순위를 갖는 경우가 있고, 오른항부터 우선순위를 갖는 경우가 있습니다.

 

2. 산술 연산자

 

단항 산술 연산자

피 연산자가 한개인 산술 연산자를 단항 산술 연산자라고 합니다.
+, - 가 존재합니다.

 

이항 산술 연산자

피 연산자가 두개인 산술 연산자를 이항 산술 연산자라고 합니다.

  • + : 왼항과 오른항을 더합니다.
  • - : 왼항에서 오른항을 뻅니다.
  • * : 왼항에서 오른항을 곱합니다.
  • / : 왼항에서 오른항을 나눕니다.
  • % : 왼항에서 오른항을 나눈값의 나머지를 구합니다.


정수와 부동 소수점 숫자의 나눗셈

정수와 정수간에 나눗셈을 수행하면 정수가 나옵니다.
정수의 나눗셈 : 8 / 4 == 2
정수와 부동 소수점 실수간에 나눗셈을 수행하면 부동소수점 실수가 나옵니다.
정수와 부동소수점 실수 나눗셈 : 7 / 4 == 1.75

 

모듈러 연산자

모듈러 연산자는 나머지 연산자%입니다.
모듈러 연산자는 정수의 연산밖에 지원을 하지 않습니다.
모듈러 연산자가 부동소수점 실수에 대한 연산을 지원하지 않는 이유는 다음과 같습니다.
부동 소수점 실수에서 나머지가 발생할 떄 표현체계 상에서 어떻게 표현해야할지를 정할 수 없다. => 너무 방대하다.
파악하지 못한 여러가지 이유가 더 있을 수는 있지만 다음과 같은 이유로 인해 부동 소수점 실수에 대해서는 모듈러 연산을 지원하지 않습니다.

 

산술 할당 연산자

  • x += y : x = x + y 와 동일합니다.
  • x -= y : x = x - y 와 동일합니다.
  • x *= y : x = x * y 와 동일합니다.
  • x /= y : x = x / y 와 동일합니다.
  • x %= y : x = x % y 와 동일합니다.

 

3. 증감 연산자

후위 연산의 경우 연산자 우선순위가 가장 나중으로 밀리기 때문에 의도와 다른 연산결과를 나타낼 위험성이 있으므로 뚜렷한 의도를 가지고 사용하는 것이 아니라면 전위연산을 사용하는 습관이 좋습니다.


전위연산

  • ++x : x에서 ++ 연산이 수행된 값을 반환합니다.
  • --x : x에서 -- 연산이 수행된 값을 반환합니다.

후위연산

  • x++ : 연산이 종료된뒤 x에 ++ 연산을 수행합니다.
  • x-- : 연산이 종료된뒤 x에 -- 연산을 수행합니다.

증감 연산자 연산순서 예시

int x = 8  
int y = (x++) + 5 (++x)

// 연산 순서
1. (x + 5) = 8 + 5 == 13
2. x++ => x == 9
3. ++x => x == 10
4. 13 + 10 = 23
5. y = 23

 

4. 논리 연산자

참(true)과 거짓(false)

  • 거짓 (false) : 정수 관점에서 0을 거짓이라고 합니다.
  • 참 (true) : 정수 관점에서 0이 아닌 수를 참이라고 합니다. 일반적으로 1로 지칭합니다.

참과 거짓을 나누는 자료형 bool

  • bool 자료형은 0과 1로 표현됩니다.
bool x = true; // 1
bool y = false; // 0


진리표

진리표

 

5. 대입 연산자

대입 연산자는 = 입니다.
값을 할당하는데 사용합니다.

 

6. 비트 연산자

비트 AND &

왼항과 오른항이 모두 참일 떄만 1입니다.
그 외의 경우는 모두 0입니다.


비트 OR |

왼항과 오른항이 모두 거짓일 때만 0입니다.
그 외의 경우는 모두 1입니다.


비트 XOR ^

왼항과 오른항의 값이 다를 때만 1입니다.
그 외의 경우는 모두 0입니다.


왼쪽 시프트 <<

모든 비트를 왼항으로 한칸 움직입니다.
가장 왼쪽 항은 사라집니다.
가장 오른쪽 항에 0을 추가합니다.
2를 곱한것과 같습니다.
$8 << 2$ == $8 * 2^2$


오른쪽 시프트 >>

모든 비트를 오른항으로 한칸 움직입니다.
가장 오른쪽 항은 사라집니다.
가장 왼쪽 항에 0을 추가합니다.
2를 나눈것과 같습니다.
$8 >> 2$ == $8 / 2^{2}$

 

7. 삼항 연산자

A ? B : C 에서 A가 참이면 B가 할당, 거짓이면 C가 할당입니다.
x = (expression) ? statement1 : statement2의 형태입니다.
즉 expression이 참이면 x = statement1 할당, 거짓이면 statement2 할당입니다.

int test = 20;
// test가 20이 참이면 x = 100 구문이 작동
// test가 20이 아니면 x = 200 구문이 작동.
int x = test == 20 ? 100 : 200;


8. 문제 풀이

문제 1.

단항 산술연산자의 종류와 이항 산술 연산자의 종류를 나열하고 설명해주세요.


문제 2.

전위 연산과 후위 연산의 차이점을 설명해주세요.


문제 3.

다음과 같은 문제에서 y의 값과 연산의 순서를 말해주세요.

// y의 값은?
int x = 8;
int y = x-- + 10 + --x;


문제 4.

비트 연산을 이용하여 status 변수에 POISON과 TIRED 상태 값을 추가 해주세요.

#define POISON        (1 << 0)
#define THIRSTY        (1 << 1)
#define TIRED        (1 << 2)
#define FIRE        (1 << 3)
#define COLD        (1 << 4)

int main()
{
    unsigned int status = 0;
}


문제 5.

비트 연산을 이용하여 status 변수에서 TIRED와 COLD의 상태값을 제거해주세요.

#define POISON        (1 << 0)
#define THIRSTY        (1 << 1)
#define TIRED        (1 << 2)
#define FIRE        (1 << 3)
#define COLD        (1 << 4)

int main()
{
    unsigned int status = 31; // 16 + 8 + 4 + 2 + 1
}

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

C++ 클래스  (0) 2024.05.12
C++ 동적할당  (0) 2024.05.04
C++ 컴파일 과정  (0) 2024.04.21
C++ Const 정확도(Const Correctness)  (0) 2024.04.06
C++ 자료형  (0) 2024.02.27