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 |