본문 바로가기
자바 풀스택 공부

Day 5.

by seung_nari 2022. 1. 6.

1.1 연산자와 피연산자

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

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

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

예를 들어 x의 값이 6일 때, 덧셈연산 'x+5'의 결과값은 항상 11이다.


1.2 대입연산자

4 * x + 3 이라는 식에서 x가 6일 경우, 다음과 같은 과정으로 처리된다.

    4 * x + 3;
 -> 4 * 6 + 3;
 -> 27;

 

 

식이 평가되어 27이라는 결과를 얻었지만, 이 값이 어디에도 쓰이지 않고 사라지기 때문에 이 문은 아무런 의미가 없다. 그래서 아래와 같이 대립 연산자'='를 사용해서 변수와 같이 값을 저장할 수 있는 공간에 결과를 저장해야한다.

    y = 4 * x + 3;
 -> y = 4 * 6 + 3;
 -> y = 27;

1.3 연산자의 종류

산술 연산자 : 사칙 연산과 나머지 연산

+ - * / % << >>

 

비교 연산자 : 크고 작음과 같고 다름을 비교

> < >= <= == !=

 

논리 연산자 : '그리고(AND)'와 '또는(OR)'으로 조건을 연결

&& || ! & | ^ ~

 

대입 연산자 : 우변의 값을 좌변에 저장

=

 

기타 : 형변환 연산자, 삼항 연산자, instanceof연산자

(type) ?: instanceof

1.4 연산자의 우선순위

  1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
  2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.

 

¡ 주의 

! 쉬프트 연산자(<<)는 덧셈 연산자보다 우선순위가 낮다.

x << 2 + 1 // x << ( 2 + 1 ) 이랑 동일

 

! 비트 연산자(&)는 비교 연산자(==)보다 우선순위가 낮으므로 비교연산 후에 비트연산이 수행된다.

data & 0xFF == 0 // data & ( 0xFF == 0) 과 동일

 

! 논리 연산자 중에서 AND를 의미하는 '&'와 '&&'가 OR를 의미하는 '|'와 '||'보다 우선순위가 높다. 이처럼 수식에 AND와 OR가 함꼐 사용되는 경우는 다음과 같이 괄호를 사용해서 우선순위를 명확히 하는 것이 좋다.

   x <-1 || x > 3 && x < 5
-> x < -1 || ( x > 3 && x < 5 )

1.5 연산자의 결합규칙

같은 우선순위의 연사자들이 여러 개 있는 경우, 어떤 순서로 연산을 수행할지 정하는 규칙을 '연산자의 결합규칙'이라고 한다.

  • 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른족이다.

결합규칙이 왼쪽에서 오른쪽인 경우
결합규칙이 오른쪽에서 왼쪽인 경우


1.6 산술 변환(usual arithmetic conversion)

이항 연산자는 두 피연산자의 타임이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치시켜야한다. 

int i = 10;
float f = 20.0f;

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

 

대부분의 경우, 두 피연산자의 타입 중에서 더 큰 타입으로 일치시킨다.

그 이유는 작은 타입으로 형변환하면 원래의 값이 손실될 가능성이 있기 때문이다.

 

작은 타입에서 큰 타입으로 형변환하는 경우, 자동적으로 형변환되므로 형변환 연산자를 생략 가능하다.

float result = f + 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

 

주목! '연산결과의 타입'

  • 연산결과의 타입은 피연산자의 타입과 일치한다.
int / int -> int
5   / 2   -> 2
int / (float)int -> int / float -> float / float -> float
5   / (float)2   -> 5   / 2.0f  -> 5.0f  / 2.0f  -> 2.5f

 

 

 

'자바 풀스택 공부' 카테고리의 다른 글

Day 7.  (0) 2022.01.10
Day 6.  (0) 2022.01.06
Day 4.  (0) 2022.01.04
Day 3.  (0) 2022.01.04
Day 2-2.  (0) 2022.01.03

댓글