operators_arithmetic — 산술 연산자
operators_arithmetic — 산술 연산자 (Arithmetic operators)
**산술 연산자(arithmetic operator)**는 덧셈, 뺄셈, 곱셈, 나눗셈 등 수치 계산을 수행하는 연산자들이에요.
정수·부동 소수점 타입에 대해 기본 산술 연산을 제공하며, 클래스에서 정의해 사용자 타입에도 적용할 수 있어요.
출처: cppreference
본문
산술 연산자는 피연산자에 대한 수치 연산을 수행해요.
단항 산술 연산자
+x— 단항 플러스 (값 유지)-x— 단항 마이너스 (부호 반전)x+y— 덧셈x-y— 뺄셈x*y— 곱셈x/y— 나눗셈x%y— 나머지 (정수만)
정수 나눗셈
정수 나눗셈 a / b는 내림(truncation toward zero)으로 결과가 돼요.
7 / 2 // 3 (내림)
-7 / 2 // -3
7 % 2 // 1
-7 % 2 // -1
산술 승격과 변환
서로 다른 타입을 연산하면 **보통 산술 변환(usual arithmetic conversions)**으로 공통 타입으로 승격돼요. 예: int + double → double.
int + double // double
char + char // int 로 승격
오버플로우
부호 있는 정수 산술 오버플로우는 정의되지 않은 동작이에요.
int x = INT_MAX;
x + 1; // UB
부호 없는 정수는 오버플로우 시 모듈로(래핑) 동작해요.
부동 소수점 연산
float, double, long double에 대해 수행돼요. 나눗셈은 스케일링·정밀도 문제가 있을 수 있어요.
double d = 7.0 / 2.0; // 3.5
복합 대입
+=, -=, *=, /=, %=는 "계산 후 대입"이에요.
int x = 5;
x += 3; // x = x + 3 -> 8
포인터 산술
포인터에 정수를 더/빼면 배열 요소를 이동해요.
int a[5];
int* p = &a[0];
p + 2; // a[2] 를 가리킴
사용자 정의 연산자
클래스에서 operator+, operator* 등을 오버로드해 사용자 타입 산술을 정의할 수 있어요.
노트 (Notes)
%(나머지)는 정수 타입에만 있어요.- 오버플로우·정밀도 문제를 주의해야 해요.
- C++20의
std::midpoint,std::lerp처럼 안전·정확한 산술 도구도 있어요.