> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/java/beginner/operator/arithmetic-operator.md).

# 산술 연산

## 산술 연산

이 문서에서는 산술 연산에 대해서 다룬다.

### 산술 연산자

산술 연산자는 다음과 같은 종류가 있다.

| 연산자 | 설명            |
| --- | ------------- |
| +   | 덧셈을 수행하는 연산자  |
| -   | 뺄셈을 수행하는 연산자  |
| \*  | 곱셈을 수행하는 연산자  |
| /   | 나눗셈을 수행하는 연산자 |
| %   | 나머지를 수행하는 연산자 |

나눗셈 관련 연산자인 `/`와 `%`를 사용할 때 주의해야 한다.

### 산술 연산자 데모 1

```java
import java.lang.*;

public class ArithmeticOperatorExample1 {
    public static void main(String[] args){
        int a = 10;
        int b = 3;
        
        int c = a + b;
        int d = a - b;
        int e = a * b;
        int f = a / b;
        int g = a % b;
        
        System.out.println("c = " + c);
        System.out.println("d = " + d);
        System.out.println("e = " + e);
        System.out.println("f = " + f);
        System.out.println("g = " + g);
    }
]
```

위의 예제를 실행하면 다음과 같은 출력 결과가 나온다.

```
c = 13
d = 7
e = 30
f = 3
g = 1
```

눈여겨볼 부분은 `f`와 `g`이다.

`f`는 결과적으로 `10 / 3`의 나눗셈 연산을 수행하게 되는데, 앞서 살펴본 정수의 특징이 적용되어 결과가 정수로 나오게 된다([정수](http://www.sysout.co.kr/home/webbook/page/read/1328) 문서에 정수의 특징이 기록되어 있다). 따라서 정수형 나눗셈이 이루어지게 되어 결과는 3이 대입된다.

`g`는 나눗셈의 나머지가 저장되며, 정수형 나눗셈 결과의 나머지인 1이 대입된다.

정리하면 다음 그림과 같다.

![](/files/-MdMgrzKboNIFXmh5SBC)

### 산술 연산자 데모 2

```java
import java.lang.*;

public class ArithmeticOperatorExample2 {
    public static void main(String[] args){
        
        int a = 1 + 2 * 3;
        int b = (1 + 2) * 3;
        
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}
```

실행하면 출력 결과는 다음과 같이 나온다.

```
a = 7
b = 9
```

산술 연산은 다음과 같이 우선순위가 구분되어 있다.

* 우선순위 높음 : `*`, `/`, `%`
* 우선순위 낮음 : `+`, `-`

우선순위가 동일한 연산자들끼리는 좌측부터 계산되며, 우선순위가 다를 경우 높은 연산자가 먼저 실행된다. 따라서 a의 경우 `2 * 3`이 먼저 실행되어 7이 대입된다. 하지만 괄호연산(`( )`)이 가장 높은 우선순위를 가지고 있기 때문에 원하는 연산을 묶어주면 실행 순서가 바뀌게 된다. b의 경우 `(1 + 2)`가 먼저 실행되어 9가 대입된다.

### 산술 연산자 데모 3

```java
import java.lang.*;

public class ArithmeticOperatorExample3 {
    public static void main(String[] args){
        int a = 75;
        
        int b = a / 10;
        int c = a % 10;
        
        System.out.println("b = " + b);
        System.out.println("c = " + c);
    }
}
```

실행하면 다음과 같은 결과가 나온다.

```
b = 7
c = 5
```

나눗셈과 나머지 연산을 이용하면 다양한 계산을 수행할 수 있다. 위의 예제는 **두 자리 정수의 자리수 분리**를 수행한다.

![](/files/-MdMh2dhgVsW_8f32EvN)

세 자리 혹은 그 이상인 경우도 이와 유사하게 분리가 가능하다.

```java
import java.lang.*;

public class ArithmeticOperatorExample3 {
    public static void main(String[] args){
        int a = 136;
        
        int b = a / 100;
        int c = a / 10 % 10;
        int d = a % 10;
        
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println("d = " + d);
    }
}
```

실행한 결과는 다음과 같다.

```
a = 136
b = 1
c = 3
d = 6
```

세 자리 이후부터는 계산과정이 조금 복잡해지는데, 그림으로 정리해보면 다음과 같다.

> 백의 자리 구하기

![백의 자리 구하기](/files/-MdMhPjNBPgcYGUXg7tu)

> 십의 자리 구하기

![십의 자리 구하기](/files/-MdMhVD70p6jhB6LZgUa)

> 일의 자리 구하기

![일의 자리 구하기](/files/-MdMhb6t8bt36-vOw_Wj)

### 산술 연산자 데모 4

```java
import java.lang.*;

public class ArithmeticOperatorExample4 {
    public static void main(String[] args){
        int a = 7;
        int b = a % 2;
        
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}
```

실행 후 출력 결과는 다음과 같다.

```
a = 7
b = 1
```

b의 값은 a가 얼마냐에 따라 달라지긴 하지만, 예측 가능한 범위 내에 있다. b는 2로 나눈 나머지이기 때문에 가질 수 있는 값은 `0`과 `1` 두 가지 뿐이다. 따라서 a가 아무리 복잡해도 b를 보면 `배수 판정`이 가능하다.

![2로 나눈 나머지를 구하는 방법](/files/-MdMhqe63oC4m0VDVk9f)

a가 7일 경우 2로 나누면 나머지가 1이기 때문에 **2로 나누어 떨어지지 않는다**. 따라서 7은 2의 배수가 아니다. 이와 같이 나머지 연산을 이용하면 배수 판정이 가능하다.

### 산술 연산자 데모 5

```java
import java.lang.*;

public class ArithmeticOperatorExample5 {
    public static void main(String[] args){
        
        int money = 12345;
        int result = money / 100 * 100;
        
        System.out.println("money = " + money);
        System.out.println("result = " + result);
        
    }
}
```

실행 후 출력 결과는 다음과 같다.

```
money = 12345
result = 12300
```

십원 이하가 버려진 것을 확인할 수 있다. 나눗셈으로 할 수 있는 대표적인 연산의 한 종류이며, **정수형 연산의 결과는 정수**라는 특징을 활용한 예제이다.

$$
12345  / 100 = 123
$$

$$
123 \* 100 = 12300
$$

나눗셈을 하는 순간 십의 자리와 일의 자리값이 버려지기 때문에, 이후의 곱셈을 하여도 십의 자리와 일의 자리는 0이 된다. 결론적으로 십의자리 이하를 `버림` 연산한 것이며, 약간의 연산을 추가하면 `반올림`이나 `올림` 처리도 가능하다.

반올림 예제는 다음과 같다.

```java
import java.lang.*;

public class ArithmeticOperatorExample5_1 {
    public static void main(String[] args){
        int money = 23456;
        int result = (a + 50) / 100 * 100;
        
        System.out.println("money = " + money);
        System.out.println("result = " + result);
    }
}
```

올림 예제는 다음과 같다.

```java
import java.lang.*;

public class ArithmeticOperatorExample5_1 {
    public static void main(String[] args){
        int money = 23456;
        int result = (a + 99) / 100 * 100;
        
        System.out.println("money = " + money);
        System.out.println("result = " + result);
    }
}
```

`버림`, `반올림`, `올림`의 자리수에 따라 값들이 조금씩 달라지게 되므로 바꾸어 실습해본 뒤 이해하도록 한다.
