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 + doubledouble.

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처럼 안전·정확한 산술 도구도 있어요.

더 알아보기 (Learn more)

cppreference