icon안동민 개발노트

산술 연산자


산술 연산자 개요

 산술 연산자는 수학적 계산을 수행하는 데 사용되는 기본적인 연산자입니다. C++에서 제공하는 주요 산술 연산자는 다음과 같습니다.

 1. 덧셈 +

 2. 뺄셈 -

 3. 곱셈 *

 4. 나눗셈 /

 5. 나머지 %

 이 연산자들을 이용하여 다양한 수학적 계산을 프로그램 내에서 수행할 수 있습니다.

기본 산술 연산자

 덧셈 연산자 +

 덧셈 연산자는 두 개의 피연산자를 더합니다.

#include <iostream>
 
int main() {
    int a = 5, b = 3;
    int sum = a + b;
    std::cout << "5 + 3 = " << sum << std::endl;  // 출력: 5 + 3 = 8
    
    double x = 2.5, y = 3.7;
    double result = x + y;
    std::cout << "2.5 + 3.7 = " << result << std::endl;  // 출력: 2.5 + 3.7 = 6.2
    
    return 0;
}

 뺄셈 연산자 -

 뺄셈 연산자는 첫 번째 피연산자에서 두 번째 피연산자를 뺍니다.

#include <iostream>
 
int main() {
    int a = 10, b = 4;
    int difference = a - b;
    std::cout << "10 - 4 = " << difference << std::endl;  // 출력: 10 - 4 = 6
    
    double x = 5.5, y = 2.3;
    double result = x - y;
    std::cout << "5.5 - 2.3 = " << result << std::endl;  // 출력: 5.5 - 2.3 = 3.2
    
    return 0;
}

 곱셈 연산자 *

 곱셈 연산자는 두 개의 피연산자를 곱합니다.

#include <iostream>
 
int main() {
    int a = 6, b = 7;
    int product = a * b;
    std::cout << "6 * 7 = " << product << std::endl;  // 출력: 6 * 7 = 42
    
    double x = 2.5, y = 3.0;
    double result = x * y;
    std::cout << "2.5 * 3.0 = " << result << std::endl;  // 출력: 2.5 * 3.0 = 7.5
    
    return 0;
}

 나눗셈 연산자 /

 나눗셈 연산자는 첫 번째 피연산자를 두 번째 피연산자로 나눕니다. 주의할 점은 정수 나눗셈과 실수 나눗셈의 결과가 다르다는 것입니다.

#include <iostream>
 
int main() {
    int a = 10, b = 3;
    int quotient = a / b;
    std::cout << "10 / 3 (정수 나눗셈) = " << quotient << std::endl;  // 출력: 10 / 3 (정수 나눗셈) = 3
    
    double x = 10.0, y = 3.0;
    double result = x / y;
    std::cout << "10.0 / 3.0 (실수 나눗셈) = " << result << std::endl;  // 출력: 10.0 / 3.0 (실수 나눗셈) = 3.33333
    
    return 0;
}

 주의 : 정수 나눗셈의 경우, 결과도 정수가 되며 소수점 이하는 버려집니다.

 나머지 연산자 %

 나머지 연산자는 첫 번째 피연산자를 두 번째 피연산자로 나눈 나머지를 구합니다. 이 연산자는 정수형 피연산자에만 사용할 수 있습니다.

#include <iostream>
 
int main() {
    int a = 17, b = 5;
    int remainder = a % b;
    std::cout << "17 % 5 = " << remainder << std::endl;  // 출력: 17 % 5 = 2
    
    // 음수를 사용한 나머지 연산
    int x = -17, y = 5;
    int result = x % y;
    std::cout << "-17 % 5 = " << result << std::endl;  // 출력: -17 % 5 = -2
    
    return 0;
}

 주의 : 나머지 연산자를 사용할 때 두 번째 피연산자(나누는 수)가 0이 되지 않도록 주의해야 합니다. 0으로 나누면 프로그램이 런타임 에러를 발생시킵니다.

복합 대입 연산자

 복합 대입 연산자는 산술 연산과 대입을 결합한 연산자입니다.

 이를 사용하면 코드를 더 간결하게 작성할 수 있습니다.

  • += : 덧셈 후 대입
  • -= : 뺄셈 후 대입
  • *= : 곱셈 후 대입
  • /= : 나눗셈 후 대입
  • %= : 나머지 연산 후 대입
#include <iostream>
 
int main() {
    int x = 10;
    
    x += 5;  // x = x + 5와 동일
    std::cout << "x += 5 결과: " << x << std::endl;  // 출력: x += 5 결과: 15
    
    x -= 3;  // x = x - 3와 동일
    std::cout << "x -= 3 결과: " << x << std::endl;  // 출력: x -= 3 결과: 12
    
    x *= 2;  // x = x * 2와 동일
    std::cout << "x *= 2 결과: " << x << std::endl;  // 출력: x *= 2 결과: 24
    
    x /= 4;  // x = x / 4와 동일
    std::cout << "x /= 4 결과: " << x << std::endl;  // 출력: x /= 4 결과: 6
    
    x %= 5;  // x = x % 5와 동일
    std::cout << "x %= 5 결과: " << x << std::endl;  // 출력: x %= 5 결과: 1
    
    return 0;
}

증가/감소 연산자

 증가++ 및 감소-- 연산자는 변수의 값을 1 증가시키거나 감소시키는 연산자입니다.

 이 연산자들은 전위(prefix) 형식과 후위(postfix) 형식으로 사용할 수 있으며, 그 동작에 차이가 있습니다.

#include <iostream>
 
int main() {
    int a = 5, b = 5;
    
    // 전위 증가 연산자
    std::cout << "전위 증가 연산자: " << ++a << std::endl;  // 출력: 전위 증가 연산자: 6
    std::cout << "a의 값: " << a << std::endl;  // 출력: a의 값: 6
    
    // 후위 증가 연산자
    std::cout << "후위 증가 연산자: " << b++ << std::endl;  // 출력: 후위 증가 연산자: 5
    std::cout << "b의 값: " << b << std::endl;  // 출력: b의 값: 6
    
    // 전위와 후위 감소 연산자도 같은 방식으로 동작합니다.
    
    return 0;
}

 주의 : 전위 연산자는 변수의 값을 먼저 변경한 후 그 값을 사용하지만, 후위 연산자는 현재 값을 사용한 후 변수의 값을 변경합니다.

연산자 우선순위

 산술 연산자들 사이에도 우선순위가 있습니다.

 기본적인 우선순위는 다음과 같습니다.

  1. 증가/감소 ++, --
  2. 곱셈, 나눗셈, 나머지 *, /, %
  3. 덧셈, 뺄셈 +, -

 괄호를 사용하여 우선순위를 명시적으로 지정할 수 있습니다.

#include <iostream>
 
int main() {
    int result1 = 5 + 3 * 2;
    std::cout << "5 + 3 * 2 = " << result1 << std::endl;  // 출력: 5 + 3 * 2 = 11
    
    int result2 = (5 + 3) * 2;
    std::cout << "(5 + 3) * 2 = " << result2 << std::endl;  // 출력: (5 + 3) * 2 = 16
    
    return 0;
}

주의사항

 1. 정수 나눗셈에서의 버림 : 정수 나눗셈의 결과는 항상 정수입니다. 소수점 이하는 버려집니다.

 2. 0으로 나누기 : 0으로 나누는 연산은 정의되지 않으며, 프로그램이 런타임 에러를 발생시킵니다.

 3. 오버플로우와 언더플로우 : 변수가 저장할 수 있는 범위를 넘어서는 값을 계산하면 오버플로우나 언더플로우가 발생할 수 있습니다.

 4. 부동소수점 연산의 정밀도 : 부동소수점 연산은 근사값을 사용하므로, 정확한 값을 기대하기 어려울 수 있습니다.

연습 문제

  1. 다음 연산의 결과를 예측해보고, 프로그램을 작성하여 확인해보세요.

    a) 15 / 4

    b) 15 % 4

    c) 15.0 / 4

    d) 3 + 4 * 2

    e) (3 + 4) * 2

  2. 섭씨 온도를 화씨 온도로 변환하는 프로그램을 작성하세요. 변환 공식 : (섭씨 * 9/5) + 32
  3. 증가/감소 연산자의 전위 형식과 후위 형식의 차이를 보여주는 프로그램을 작성하세요.
  4. 사용자로부터 원의 반지름을 입력받아 원의 면적과 둘레를 계산하는 프로그램을 작성하세요. (π 값은 3.14159를 사용하세요)
  5. 두 정수를 입력받아 사칙연산과 나머지 연산의 결과를 모두 출력하는 프로그램을 작성하세요.

 참고자료