JAVA/연산자(Operator)

[JAVA] 연산자(operator)

prize1209 2021. 6. 6. 20:48

1. 연산자와 피연산자 

 

연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데 이를 '피연산자'라 한다.

 

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

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

 

 

 

2. 연산자의 종류

 

 

종류 연산자 설명
산술 연산자 + - * / % << >> 사칙 연산(+,-,*,/)과 나머지 연산(%)
비교 연산자 > <  >= <= == !=  크고 작음과 같고 다름을 비교
논리 연산자 &&  ||  !  &  |  ^ ~ '그리고(AND)' 
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ? : instanceof 형변환 연산자, 삼항 연산자, instanceof연산자

 

피연산자의 개수에 의한 분류

 

피연산자의 개수가 하나면 '단항 연산자'

두 개면 '이항 연산자'

세 개면 '삼항 연산자'

 

대부분의 연산자는 '이항 연산자'이고 삼항 연산자는 오직 '? :' 하나뿐이다.

 

 

부호 연산자는 단항 연산자로 피연산자가 '3' 한 개 뿐이지만, 뺄셈 연산자는 이항 연산자로 '-3' 과 '5' 두 개이다.

 

 

3. 연산자의 우선순위와 결합규칙 

 

주의해야할 연산자 우선순위 예

 

설명
x << 2+1 쉬프트 연산자(<<)는 덧셈 연산자보다 우선 순위가 낮다.
그래서 식은 'x<<(2+1)' 과 같다.
data & 0xFF ==0 비트 연산자(&)는 비교 연산자(==)보다 우선 순위가 낮으므로
비교 연산 후에 비트 연산이 수행된다. 
그래서 식은  ' data & (0xFF ==0)' 과 같다.
x <-1 || x>3 && x<5 논리 연산자 중에서 &&가 || 보다 우선 순위가 높다. 
그래서 식은 'x<-1 || (x>3 && x<5)'과 같다.

 

*연산자 결합규칙

 

대부분 왼쪽-> 오른쪽 순서로 연산을 수행한다. 

단항 연산자와 대입 연산자만 그 반대로, 오른쪽->왼쪽으로 연산을 수행한다. 

 

정리

1. 산술 > 비교 > 논리 >대입 . 대입이 제일 마지막에 수행

2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선 순위가 이항 연산자보다 높다. 

3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼->오른쪽이다.

 

 

<연산자의 우선순위>

 

 

 

 

4. 산술 변환(usual arithmetic conversion)

 

이항 연산자로 연산을 하기전 피연산자의 타입이 다르다면 타입을 형변환해서 일치시켜야한다. 

 

int i = 10;
float f = 20.0f;

float result = f+ (float)i; //형변환으로 두 피연산자의 타입 일치

 

작은 타입에서 큰 타입으로 형변환하는 경우 형변환 연산자 생략 가능 

 

연산 전에 피연산자의 타입의 일치를 위해 자동 형변환되는 것을 '산술 변환' 또는 '일반 산술 변환'이라 한다.

이 변환은 이항 연산에서만 아니라 단항 연산에서도 일어난다. 

 

1. 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

 

long + int -> long + long -> long

float + int -> float + float -> float

double + float -> double + double -> double 

 

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

 

byte + short -> int + int -> int 

char + short -> int + int -> int

 

1은 피연산자의 값손실을 최소화하기 위함이고, 2는 정수형 int 타입이 가장 효율적으로 처리할 수 있기 때문.

char 나 short 의 표현 범위가 좁아서 연산중에 오버플로우가 발생할 가능성이 높기 때문.

 

피연산자 중 한쪽을 float와 같은 실수형으로 형변환해야 한다. 그러면 다른 한쪽은 일반 산술 변환의 첫번째 규칙에 의해 자동적으로 형변환되어 두 피연산자 모두 실수형이 되고, 연산결과 역시 실수형의 값을 가진다.

 

int / (float)int -> int /float -> float /float ->float

5/ (float)2 -> 5/ 2.0f -> 5.0f/2.0f ->2.5f

 

정리

일반산술변환? 연산 수행 직전에 발생하는 피연산자의 자동 형변환

1. 두 피연산자의 타입을 같게 일치시킨다. (큰 타입으로 일치)

2. 피연산자의 타입이 int 보다 작으면 int로 변환

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

[JAVA] charAt()  (0) 2021.06.08
[JAVA] 논리 연산자  (0) 2021.06.08
[JAVA] 비교 연산자  (0) 2021.06.08
[JAVA] 산술 연산자  (0) 2021.06.07
[JAVA] 증감 연산자/부호 연산자  (0) 2021.06.06