[모던C++입문] 1.3 연산자
- 📕 Book/모던C++입문
- 2021. 7. 1.
1.3 연산자
- 계산연산자
- 산술 연산자 : ++, +, *, &, ...
- 불 연산자
- 비교 연산자 : <=, !=, ...
- 논리 연산자 : &&, ||
- 비트 연산자 : ~, <<, >>, &, ^, |
- 할당 연산자 : =, +=, ...
- 프로그램 흐름 연산자 : 함수호출, ?:, |
- 메모리 처리 연산자: new, delete
- 접근 연산자 : ., ->, [], *, ...
- 타입 처리 연산자 : dynamic_cast, typeid, sizeof, alignof
- 오류 처리 연산자 : throw
산술 연산자
연산 | 표현식 |
---|---|
후위 증가 후위 감소 |
x++ x-- |
전위 증가 전위 감소 단항 덧셈 단항 뺄셈 |
++x --x +x -x |
곱셈 나눗셈 나머지 |
x * y x / y x % y |
이항 덧셈 이항 뺄셈 |
x + y x - y |
int i = 3;
i++; //이제 i = 4
const int j - 5;
j++; //j는 상수 (빌드오류 : '++'에 l-value가 필요합니다.)
(3+5)++; //일시적인 값 (빌드오류 : '++'에 l-value가 필요합니다.)
int i = 3, j = 3;
int k = ++i + 4; //i는 4, k는 8
int l = j++ + 4; //j는 4, l는 7
인수의 계산순서는 정의되지 않는다.
int i = 3, j = 7, k;
k = f(++i) + g(++i) + j;
위의 경우 컴파일러에 의해 f(4) + g(5) + 7 이거나 f(5) + g(4) + 7 중 하나로 계산됨
코드를 분리하여 순서를 명확히 하자
변환은 정밀도 손실을 초래할 수 있다
long l = 123456789012;
long l2 = l + 1.0f - 1.0; //부정확
long l3 = l + (1.0f - 1.0); //정확
//결과값
l2 = 1234567954431
l3 = 1234567890123
불 연산자
연산 | 표현식 |
---|---|
아니다 | !b |
크다 크거나 같다 |
x > y x >= y |
작다 작거나 같다 |
x < y x <= y |
같다 같지 않다 |
x == y x != y |
논리적 AND 논리적 OR |
b && c b || c |
비교는 연결해서 사용할 수 없다
bool in_bound = min <= x <= y <= max; //오류
bool in_bound = min <= x && x <= y && y <= max;
비트 연산자
연산 | 표현식 |
---|---|
NOT(1의 보수) | ~x |
왼쪽 시프트 | x << y |
오른쪽 시프트 | x >> y |
비트 AND | x & y |
비트 OR | x ^ y |
비트 XOR | x | y |
할당 연산자
연산 | 표현식 |
---|---|
단순 할당 곱셈 후 할당 나눗셈 후 할당 나머지 후 할당 덧셈 후 할당 뺄셈 후 할당 왼쪽 쉬프트 후 할당 오른쪽 쉬프트 후 할당 AND 후 할당 OR 후 할당 XOR 후 할당 |
x = y x *= y x /= y x %= y x += y x -= y x <<= y x >>= y x &= y x |= y x ^= y |
프로그램 흐름
- 조건 연산자(삼항 연산자)
c ? x : y 는 조건 c를 계산한뒤 참일경우 x, 거짓일경우 y 값을 갖는 연산자
if문의 대한으로 사용할수 있다 - 콤마 연산자
순차적인 계산을 제공하는 연산자
for문에서 ++i, ++j 형태로 사용하는 경우 등이 있다
메모리 처리
- new연산자는 메모리를 할당하고 delete 연산자는 메모리를 해제하는 연산자
접근 연산자
연산 | 표현식 |
---|---|
멤버 선택 역참조된 멤버 선택 첨자 |
x.m p->m x[i] |
역참조 | *x |
멤버 역참조 역참조된 멤버 역참조 |
x.q p->q |
타입 처리
연산 | 표현식 |
---|---|
런타임 타입 식별 타입 식별 |
typeid(x) typeid(t) |
오브젝트의 크기 타입의 크기 인수의 개수 타입 인수의 개수 맞춤(alignment) 타입의 맞춤 |
sizeof(x) or sizeof x sizeof(t) sizeof...(p) sizeof...(P) alignof(x) alignof(t) |
오류 처리
- throw연산자는 실행시 예외를 나타내는데 사용
연산자 우선순위
- 다음 url로 표를 대체 (https://ko.cppreference.com/w/cpp/language/operator_precedence)
반응형