| 연산자 | 의미 | 예시 (10, 3) | 결과 |
|---|---|---|---|
+ |
더하기 | 10 + 3 |
13 |
- |
빼기 | 10 - 3 |
7 |
* |
곱하기 | 10 * 3 |
30 |
/ |
나누기(몫) | 10 / 3 |
3 (정수 연산 시 소수점 버림) |
% |
나머지 | 10 % 3 |
1 |
산술 연산을 수행 시 컴파일러가 자동으로 타입을 맞추는 규칙이 있다. 이를 모르면 예상치 못한 결과를 얻게 된다.
byte, short, char 타입은 연산 시 무조건 int 타입으로 변환된 후 계산된다.int보다 큰 long 타입이 피연산자에 섞여 있으면, 결과는 long 타입이 된다.float, double)을 연산하면 정수가 실수로 변환되어 계산된다. 결과는 더 범위가 넓은 실수 타입이 된다.int a = 10;
int b = 4;
double result = a / b;
System.out.println(result); // 결과: 2.0 (2.5가 아님!)
int / int는 결과도 int여야 한다. 따라서 10 / 4의 결과인 2.5에서 소수점을 버린 2가 먼저 생성되고, 이 값이 double 변수에 저장되면서 2.0이 되는 것이다.
이를 해결하려면 피연산자 중 하나를 실수 타입으로 형변환(Casting)해야 한다.
double result = (double) a / b; // 10.0 / 4 => 2.5
%)나머지 연산자는 주로 다음과 같은 경우에 활용한다.
n % 2 == 0이면 짝수n % 3 == 0이면 3의 배수0 ~ N-1 사이의 값을 가짐정수 연산에서 0으로 나누거나(10 / 0), 0으로 나머지를 구하려고 하면(10 % 0) 프로그램이 강제 종료되는 예외가 발생한다.
java.lang.ArithmeticException: / by zero참고: 실수 연산인 10 / 0.0은 에러가 나지 않고 Infinity가 된다.
byte, short 연산 결과는 int다./)은 소수점을 버린 ‘몫’만 취한다.double로 캐스팅해야 한다.