산술 연산자
산술 연산자 개요
산술 연산자는 수학적 계산을 수행하는 데 사용되는 기본적인 연산자입니다. 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;
}
주의 : 전위 연산자는 변수의 값을 먼저 변경한 후 그 값을 사용하지만, 후위 연산자는 현재 값을 사용한 후 변수의 값을 변경합니다.
연산자 우선순위
산술 연산자들 사이에도 우선순위가 있습니다.
기본적인 우선순위는 다음과 같습니다.
- 증가/감소
++
,--
- 곱셈, 나눗셈, 나머지
*
,/
,%
- 덧셈, 뺄셈
+
,-
괄호를 사용하여 우선순위를 명시적으로 지정할 수 있습니다.
#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. 부동소수점 연산의 정밀도 : 부동소수점 연산은 근사값을 사용하므로, 정확한 값을 기대하기 어려울 수 있습니다.
연습 문제
- 다음 연산의 결과를 예측해보고, 프로그램을 작성하여 확인해보세요.
a) 15 / 4
b) 15 % 4
c) 15.0 / 4
d) 3 + 4 * 2
e) (3 + 4) * 2 - 섭씨 온도를 화씨 온도로 변환하는 프로그램을 작성하세요. 변환 공식 : (섭씨 * 9/5) + 32
- 증가/감소 연산자의 전위 형식과 후위 형식의 차이를 보여주는 프로그램을 작성하세요.
- 사용자로부터 원의 반지름을 입력받아 원의 면적과 둘레를 계산하는 프로그램을 작성하세요. (π 값은 3.14159를 사용하세요)
- 두 정수를 입력받아 사칙연산과 나머지 연산의 결과를 모두 출력하는 프로그램을 작성하세요.
참고자료
- C++ 공식 문서의 연산자 우선순위 표 : C++ Operator Precedence
- 정수 오버플로우에 대한 심화 학습 : Integer Overflow
- IEEE 754 부동소수점 표준 : IEEE 754 Standard
- C++17
std::remainder
함수 : std::remainder