산술 연산

산술 연산

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

산술 연산자

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

연산자

설명

+

덧셈을 수행하는 연산자

-

뺄셈을 수행하는 연산자

*

곱셈을 수행하는 연산자

/

나눗셈을 수행하는 연산자

%

나머지를 수행하는 연산자

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

산술 연산자 데모 1

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

눈여겨볼 부분은 fg이다.

f는 결과적으로 10 / 3의 나눗셈 연산을 수행하게 되는데, 앞서 살펴본 정수의 특징이 적용되어 결과가 정수로 나오게 된다(정수 문서에 정수의 특징이 기록되어 있다). 따라서 정수형 나눗셈이 이루어지게 되어 결과는 3이 대입된다.

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

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

산술 연산자 데모 2

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

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

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

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

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

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

백의 자리 구하기

십의 자리 구하기

일의 자리 구하기

산술 연산자 데모 4

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로 나눈 나머지이기 때문에 가질 수 있는 값은 01 두 가지 뿐이다. 따라서 a가 아무리 복잡해도 b를 보면 배수 판정이 가능하다.

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

산술 연산자 데모 5

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=12312345 / 100 = 123
123100=12300123 * 100 = 12300

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

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

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);
    }
}

올림 예제는 다음과 같다.

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);
    }
}

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

Last updated