공부/Java

[Java-03] 연산자(Operator) - 단항 연산자, 산술 연산자

줭♪(´▽`) 2021. 2. 2. 20:28

1. 연산자(operator)

- 연산자(operator) : 연산을 수행하는 기호(+, -, *, / 등)

- 피연산자(operand) : 연산자의 작업 대상(변수, 상수, 리터럴, 수식)

- 연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환함

 

- 식(式, expression) : 연산자와 피연산자를 조합하여 계산하고자하는 바를 표현한 것

- 평가(evaluation) : 식을 계산하여 결과를 얻는 것

 

- 피연산자의 개수가 하나면 '단항 연산자', 두 개면 '이항 연산자', 세 개면 '삼항 연산자'라고 부름

 

- 연산자는 각자 우선순위를 가지고 있고, 우선순위가 높은 연산부터 실행됨

- 연산자의 결합규칙 : 같은 우선순위의 연산자들이 여러 개 있는 경우, 나름대로의 규칙을 가지고 수행함

- 대부분 왼쪽에서 오른쪽으로 수행하지만, 단항 연산자와 대입 연산자만 오른쪽에서 왼쪽으로 수행함

 

 

- 연산자의 종류 및 우선순위

종류 결합규칙 연산자 우선순위
단항 연산자
++  --  +  -  ~  !  (type) 높음


































낮음
산술 연산자
*  /  %
+  -
<<  >>
비교 연산자
<  >  <=  >=  instanceof
==  !=
논리 연산자
&
^
|
&&
||
삼항 연산자
? :
대입 연산자
=  +=  -=  *=  /=  %=

<<=  >>=  &=  ^=  !=

 

- 산술 변환(usual arithmetic conversion) : 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것

- 쉬프트 연산자, 증감 연산자를 제외한 모든 연산에서 산술 변환이 일어남

- 산술 변환의 규칙

① 두 피연산자의 타입을 같게 일치시킴 (큰 타입으로 일치)

② 피연산자의 타입이 int보다 작은 타입이면 int로 변환

 

2. 단항 연산자

1) 증감 연산자 ++ --

① 증가 연산자 (++) : 피연산자의 값을 1 증가시킴

② 감소 연산자 (--)  :  피연산자의 값을 1 감소시킴

 

- 증감연산자가 수식이나 메서드 호출에 포함된 경우 전위형일 때와 후위형일 때의 결과가 다름

타입 설명 예시
전위형 값이 참조되기 전에 증가시킴 j = ++i;
후위형 값이 참조된 후에 증가시킴 j = i++;

 

ex) 전위형과 후위형의 차이

class Ex {
	public static void main(String args[]) {
    	int i = 5, j = 0;
        
        // (1) 전위형
        j = ++i;
        System.out.println("j: " + j + ", i: " + i);		// j: 6, i: 6
        
        i = 5;
        j = 0;

	// (2) 후위형
        j = i++;
        System.out.println("j: " + j + ", i: " + i);		// j: 5, i: 6
    }
}
        
        

(1) 전위형 : i를 먼저 1 증가시킨 다음 j에 대입

(2) 후위형 : i를 먼저 j에 대입한 다음 1 증가시킴 

 

- 하나의 식에서 증감연산자의 사용을 최소화하고, 식에 두 번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 함

 

 

2) 부호 연산자 + -

- 부호 연산자 '-'는 피연산자의 부호를 반대로 변경한 결과를 반환

- 부호 연산자 '+'는 잘 쓰이지 않음

- boolean형과 char형을 제외한 기본형에만 사용할 수 있음

 

3. 산술 연산자

1) 사칙 연산자 + - * /

- 우선순위  :  +, -    <     *, /

 

나누기 연산자 /

- 0으로 나눌 수 없음 (ArithmenticException 발생)

- 두 피연산자가 모두 int타입인 경우 연산결과 또한 int타입이기 때문에 정수만 남고 소수점 이하는 버려지게 됨

ex)
int a = 10, b = 4;

a / b            ->     10 / 4 = 2  (int형)
a / float(b)    ->      10 / 4.0f = 10.0f / 4.0f = 2.5f (float형)

 

- 기본적으로 산술 변환 규칙에 의해 피연산자의 타입이 int보다 작은 타입이면 int 타입으로 변환됨

- 결과도 int 타입으로 나옴

 

- 크기가 작은 자료형의 값을 큰 자료형의 변수에 저장할 때는 자동으로 형변환(type conversion, casting)되지만, 반대로 큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용하여 변환해주어야 함

 

- 연산결과가 int 타입의 범위를 넘어가면 명시적으로 형변환 연산자를 사용하여 더 큰 타입으로 변환해주어야 함

 

 

2) 나머지 연산자 %

- 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과를 반환함

- 오른쪽 피연산자로 0을 사용할 수 없음

- 피연산자로 음수를 넣을 수 잇음

- 오른쪽 피연산자로 음수도 허용하나, 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 값음

 

ex)

int a = 10, b= 3;
a % b       ->      10 % 3 = 1

int a = -10, b = 3;
a % b       ->      -10 % 3  = -1

int a = 10, b = -3;
a % b       ->      10 % -3  = -1

 

 

 

참고 - Java의 정석 3rd Edition (저자 : 남궁성, 출판 : 도우출판)