03.02 - 산술 연산자 (Arithmetic operators)
단항 산술 연산자 (Unary arithmetic operators)
C++ 에는 단항 더하기(+
), 단항 빼기(-
) 두 가지 단항 산술 연산자(unary arithmetic operator)가 있다. 이 두 가지 연산자는 숫자 표현식의 음수 또는 양수 값을 반환한다. 단항 연산자는 피연산자를 하나만 취한다.
Operator |
Symbol |
Form |
Operation |
Unary plus |
+ |
+x |
Value of x |
Unary minus |
- |
-x |
Negation of x |
이항 산술 연산자 (Binary arithmetic operators)
다섯 가지의 이항 산술 연산자(binary arithmetic operator)가 있다. 이항 산술 연산자는 연산자 왼쪽과 오른쪽에 피연산자를 취한다.
Operator |
Symbol |
Form |
Operation |
Addition |
+ |
x + y |
x plus y |
Subtraction |
- |
x - y |
x minus y |
Multiplication |
* |
x * y |
x multiplied by y |
Division |
/ |
x / y |
x divided by y |
Modulus (Remainder) |
% |
x % y |
The remainder of x divided by y |
덧셈(+
), 뺄셈(-
), 곱셈(*
), 나눗셈(/
)은 모두 실생활에서 계산하는 것처럼 작동한다.
- 정수와 부동 소수점 숫자의 나눗셈 (Integer and floating point division)
나눗셈 연산자(/
')는 두 가지 "모드(mode)"를 가지고 있다. 만약 두 피연산자 모두 정수라면 /
연산자는 정수 나누기를 수행한다. 정수의 모든 소수점은 삭제하고 정수 값을 반환한다. (Ex. 7 / 4 = 1
)
두 피연산자 중 하나 이상이 부동 소수점 숫자면 /
연산자는 부동 소수점 나누기를 수행한다. (Ex. 7.0/3=2.333
, 7/3.0=2.333
, 7.0/3.0=2.333
)
만약 0(or 0.0)으로 나누려고 하면 결과가 정의되지 않으므로 오류가 발생해 프로그램이 중지된다.
- static_cast<>를 사용해서 정수와 부동 소수점 나눗셈을 수행한다.
'02.08 - 문자 (char)' 포스트에서 static_cast<>
를 사용해서 char
를 int
로 형 변환(type casting)해서 출력했었다.
비슷하게, static_cast<>
를 사용해서 정수를 부동 소수점 숫자로 변환하여 정수 나누기 대신 부동 소수점 나누기를 수행할 수 있다.
#include <iostream>
int main()
{
int x = 7;
int y = 4;
std::cout << "int / int = " << x / y << "\n";
std::cout << "double / int = " << static_cast<double>(x) / y << "\n";
std::cout << "int / double = " << x / static_cast<double>(y) << "\n";
std::cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << "\n";
return 0;
}
This produces the result:
int / int = 1
double / int = 1.75
int / double = 1.75
double / double = 1.75
모듈러 연산자 (Modular operator)
모듈러 연산은 나눗셈의 나머지를 구하는 연산이다. 그래서 모듈러 연산자(modular operator) %
를 나머지 연산자(remainder operator)라고도 한다. 정수 피연산자에서만 작동하며 정수 나눗셈을 수행 후 나머지를 반환한다. (Ex. 7/4=1
의 나머지: 3
→ 7%4=3
)
모듈러 연산자(%
)는 숫자가 다른 숫자와 균등하게 나누어지는지 테스트할 때 매우 유용하다. 예를 들어, x % y == 0
이면 x가 y로 균등하게 나누어지는지 알 수 있다.
예를 들어, 1부터 100까지 한 줄에 20개의 숫자를 출력하는 프로그램을 작성해야 할 경우 모듈러 연산자를 통해 어디서 줄 바꿈을 해야 하는지 알 수 있다.
int main()
{
int count = 1;
// count가 100보다 클 때까지 반복한다.
while (count <= 100)
{
std::cout << count << " "; // count를 출력한다.
// 20으로 나누어지면 줄 바꿈을 한다.
if (count % 20 == 0)
std::cout << "\n";
count = count + 1;
}
return 0;
}
This results in:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
while
반복문은 다음에 배울것이다.
산술 할당 연산자 (Arithmetic assignment operators)
Operator |
Symbol |
Form |
Operation |
Assignment |
= |
x = y |
Assign value y to x |
Addition assignment |
+= |
x += y |
Add y to x |
Subtraction assignment |
-= |
x -= y |
Subtract y from x |
Multiplication assignment |
*= |
x *= y |
Multiply x by y |
Division assignment |
/= |
x /= y |
Divide x by y |
Modulus assignment |
%= |
x %= y |
Put the remainder of x / y in x |
지금까지 변수에 5를 더하려면 다음과 같이 했다.
x = x + 5;
위 작업을 더 간결하게 해주는 산술 할당 연산자(arithmetic assignment operator)가 있다.
x = x + 5
와 같은 문장은 너무 흔하므로 C++는 x += 5
와 같은 연산자를 제공한다. x = x * y
대신 x *= y
를 쓸 수 있다.
x += 5;
이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/ 입니다.