본문 바로가기

java/연산자(Operator)

산술 연산자

 

산술 연산자에는 사칙연산에 사용되는 연산자(+, -, *, /)와 나머지 연산자(%)가 있다.

( %는 말그대로 뒤에 붙은 수를 나눈 나머지가 결과 값이다.)

 

 

나눗셈 연산자 (/) 와 나머지 연산자 (%) 에는  0이 우항에 위치할 수 없다. 

즉, 어떤수를 0으로 나눌 수 없다.  

double num1 = 9.0 / 0 에서는 실수형만 0으로 나눴을때 에러가 나지 않고 infinity가 나온다. (오버플로우)

 

 

 

나눗셈 연산자 (/) 에서 좌항 우항 모두 init(정수)이면 결과도 init(정수)로 나오기 때문에 소수점 이하는 버리고 

몫(소수점이하를 제외한 값)을 결과로 반환한다.

반면, 좌항이나 우항 중 하나라도 실수 타입의 값이 있으면 실수 아닌 값도 자동 변환으로 계산되어 실수 값이  나온다. 

 

double num1 = 9 / 2 ; 은 4.0 결과 가 나온다. 이유는  9 / 2에서 이미 4로 내림 됐기 때문이다.

아래 num5에 실수가 있음에도 몫만 나온 이유는 init(정수타입)이 double(실수타입)보다 표현 범위가 작기 (포함되기) 때문에 형변환이 되지 않는다.  (부분집합을 떠올리면 이해하기 쉽다.)

 

 

 

  

 

 

증감연산자

변수의 값을 1씩 증가시키거나 감소시키는 연산자이다. (++) (--)

num1 = num1 + 1; // num1의 값은 2
num2 = num2 - 1; // num2의 값은 0

위 식은 수학연산에서는 성립하지 않지만 코드안에서는 성립한다.

= 는 '같다' 라는 개념이 아닌 '할당한다'의 개념이기때문이다.

즉,  num1에  num1 + 1을 할당(=)한다는 것이다.

또한 위의 코드는 아래와 같이 줄일 수도 있다.

num1++; // num1 = num1 + 1;과 같다.
++num1; // num1 = num1 + 1;과 같다.

num2--; // num2 = num2 - 1;과 같다.
--num2; // num2 = num2 - 1;과 같다.

 

주의해야 할 점은 증감 연산자의 연산 순서가 증감 연산자의 위치에 따라 달라질 수 있다는 것이다.

증감 연산자가 피연산자보다 앞에 있으면 전위형 증감 연산자, 뒤에 있으면 후위형 증감 연산자라고 한다.

  • 전위형 증감 연산자 : 증감 연산을 먼저 수행한 후, 그 결과값을 적용
  • 후위형 증감 연산자 : 기존의 값을 먼저 적용하고 그다음에 증감 연산을 수행
int num1 = 1;
int prefix = ++num1;

int num2 = 1;
int postfix = num2++;

위에서 prefix는 2이고 postfix는 1이다.

그 이유는 아래 풀이를 보면 이해하기 쉽다.

++가 변수 앞에 있으면 변수보다 ++가 먼저 실행되어 그 값을 prefix 에 할당한다. num1의 값은 2, prefix의 값도 2이다.

반대로 ++보다 변수가 앞에 있으면 변수가 먼저 postfix에 할당한다. 따라서 num2의 값은 2, postfix의 값은 1이 된다.

 

 

 

 

 

 

 

복합 대입 연산자

아래와 같이 1이 아니라 2 혹은 3씩 증가시키거나 감소시키고 싶을 때는 증감 연산자를 사용 할 수 없다.

num1 = num1 + 2;
num2 = num2 - 2;

이런 경우 복합 대입 연산자 를 사용하면 바로 위의 예제를 아래와 같이 간략하게 표현할 수 있다.

num1 += 2;
num2 -= 2;

 

 

모든 사칙 연산자 및 나머지 연산자와 대입 연산자를 결합해서 복합 대입 연산자로 사용할 수 있다.

num1 += 3; // num1 -> 13
num2 -= 3; // num2 -> 7
num3 *= 3; // num3 -> 30
num4 /= 3; // num4 -> 3
num5 %= 3; // num5 -> 1

 

 

'java > 연산자(Operator)' 카테고리의 다른 글

비교 연산자  (0) 2024.04.04
연산자 우선순위  (0) 2024.04.04
논리연산자  (0) 2024.04.04