티스토리 뷰

IT/Java

산술 연산자

오예봉봉 2020. 4. 14. 23:09

산술 연산자란?

산술 연산자란 수학에서 사칙 연산인 덧셈 , 뺄셈 , 곱셈, 나눗셈 과 나머지 연산자를 포함한 연산자를 가리킨다.

산술 연산자는 이항 연산자다. 이항 연산자는 피 연산자가 두 개인 연산자이다. 이항 연산자의 종류는 크게 다음과 같이 볼 수 있다.

  • 산술 연산자(+,-,*,/,%)
  • 대입 연산자(=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=,>>>=)        
  • 비교 연산자(<,>,<=,>=,==,!=)
  • 논리 연산자(&&,||,&,|,^,!)
  • 비트 논리 연산자(&,|,^)    
  • 비트 이동 연산자(<<,>>,>>>)

누구나 다 알고 있는 더하기 , 빼기는 설명을 생략한다.  곱하기 , 나누기 , 기호가 각각 * , / 라는 것에 주의 해야 한다. % 연산자는 생소하니 아래 예제를 보자.

 
int a = 2 ;

int b = 5 ;

int result  = 0 ;

result = b%a ;


result 값은 1 이 나온다. 5를 2로 나누면 몫은 2 이고 나머지는 1이다.


산술 연산에서 타입 변환

산술 연산에서 피 연산자들의 타입이 같지 않을 경우 피 연산자들의 타입 변환을 하여 일치 시킨 후에 연산을 수행 해야 한다. 변환 규칙은 두 피 연산자 중에서 크기가 큰 타입으로 변환 되는 것이다.
즉 , 피 연산자가 모두 정수 타입인 연산(long제외)은 int 형 값이 나오고 만약 피 연산자 중에 실수 타입이 있다면 실수 타입의 값이 나온다. 아래 예제를 보자

byte a = 1;
byte b = 1;
byte c = a + b ;

위 코드를 실행하면 컴파일 에러가 발생한다.  위에서 설명한 바와 같이 long 타입을 제외한 정수 타입의 연산은 int 타입으로 값이 나오기 때문이다.(자바 가상 머신은 기본적으로 32비트 단위로 계산한다) 따라서 , 다음과 같이 수정 해야 한다.

byte a = 1;
byte b = 1;
int c = a + b ;

또 다른 예제를 봅시다.

int a = 10 ;
int b = 4 ;
int c = a / b ;
double d = a / b ;

위 예제의 실행 결과 c는 2 , d는 2.0 이 나온다. c가 2 인 이유는 피 연산자인 a , b가 모두 int 타입이므로 소수점 이 하는 버리고 정수 값만 취하기 때문이다. d 값이 2.5가 아닌 2.0 인 이유도 동일하다. 이미 정수 타입 피 연산자들 사이의 나누기에서 2가 나왔으나 d가 double 타입 변수이므로 2.0 으로  실수화 되어서 저장되었을 뿐이다.

산술 연산자 종합 예제를 봅시다.

public class Example {
public static void main(String[ ] args) {
int v1 = 5;
int v2 = 2;
int result1 = v1 + v2;  // 덧셈 산술 연산자
System.out.println("result1=" + result1);
int result2 = v1 - v2;  //뺄셈 산술 연산자
System.out.println("result2=" + result2);
int result3 = v1 * v2;  //곱셈 산술 연산자
System.out.println("result3=" + result3);
int result4 = v1 / v2;  //나눗셈 산술 연산자
System.out.println("result4=" + result4);
int result5 = v1 % v2;  //나머지 산술 연산자
System.out.println("result5=" + result5);
double result6 = (double) v1 / v2;  // int 타입에서 double 타입으로 강제 타입 변환
System.out.println("result6=" + result6);
}
}

위 예제의 실행 결과는 아래와 같다.
result1=7
result2=3
result3=10
result4=2
result5=1
result6=2.5 

정수 타입 피 연산자들간의 산술 연산 결과로 나온 소수점 이하를 살리고 싶다면 위 예제 마지막 부분과 같이 실수인 double 타입으로 강제 변환(casting)하여 주면 된다. 


'IT > Java' 카테고리의 다른 글

비교 연산자  (0) 2020.04.16
문자열 결합 연산자  (0) 2020.04.15
단항 연산자 (2)  (0) 2020.04.13
단항 연산자 (1)  (0) 2020.04.12
연산의 순서와 방향  (0) 2020.04.11