공부기록/자바의 정석

[Java의 정석] 3. 연산자

박윤서 2022. 3. 24. 20:26

1.연산자

연산을 수행하는 기호

 

1.1 연산자와 피연산자

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

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

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

 

1.2 식과 대입연산자

식:연산자와 피연산자를 조합하여 계산하고자하는 바를 표현한 것

식을 계산하여 결과를 얻는 것을 식을 평가한다고 한다.

 

1.3 연산자의 종류, 1.4 연산자의 우선순위와 결합규칙

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

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

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

 

1.5 산술 변환

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

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

 

2. 단항 연산자

2.1 증감 연산자 ++ --

증가 연산자(++): 피연산자의 값을 1 증가 시킨다.

감소 연산자(--):  피연산자의 값을 1 감소 시킨다.

피연산자의 왼쪽에 위치하면 '전위형', 오른쪽에 위치하면 '후위형'이라고 한다.

++i; //값이 참조되기 전에 증가시킨다. i의 값을 1 증가시킨다.
i++ // 값이 참조된 후에 증가시킨다.

식에 두번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 한다.

 

2.2 부호 연산자 +-

부호 연산자 '-'는 피연산자의 부호를 반대로 변경한 결과를 반환한다. 기본형에만 사용 가능.

 

3. 산술 연산자

 

3.1 사칙 연산자 + - * /

큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연사자를 사용해서 변환해주어야 한다.

int 타입과 int 타입의 연산결과는 int타입인데, 연산결과가 오버플로우가 발생할 경우 아무리 long타입의 변수에 저장을 해도 소용이 없다. 그러므로 변수의 타입을 long으로 형변환해야 한다.

int형 간의 나눗셈을 수행하면 결과가 int임에 주의해야한다. 나눗셈의 결과를 반올림이 아닌 버린다.

반올림을 하기 위해서는 0.5를 더해준다.

 

3.2 나머지 연산자 %

나누고 난 나머지 값을 결과로 반환하는 연산자.

나머지 연산자는 나누는 수로 음수도 허용한다. 그러나 부호는 무시된다.

 

4. 비교연산자

 

4.1 대소비교 연산자 <> <= >=

 

 

참조형에는 사용할 수 없다.

 

4.2 등가비교 연산자 == !=

두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자. 모든 자료형에 사용 가능.

기본형과 참조형을 비교할 수는 없다.

두 문자열을 비교할 때는 equals()라는 메서드를 사용해야 한다.

대소문자를 구별하지 않고 비교하고 싶으면, equalIgnoreCase()를 사용하면 된다.

 

5. 논리 연산자

5.1 논리 연산자 - &&, ||, !

&&: '그리고'에 해당하며, 모두 true일 때만 true

||: '또는'에 해당하며, 어느 한 쪽만 true여도 true

!: 피연산자가 true이면 false를, false면 true를 반환.

 

5.2 비트 연산자 & | ^ ~ << >>

| : 한 쪽의 값이 1이면 1을 결과로 얻는다.

&: 피연산자 양쪽이 모두 1이어야만 1을 결과로 얻는다.

^: 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다.

~: 피연산자를 2진수로 표현할 때, 0은 1로, 1은 0으로 바꾼다. '!'와 유사.

<< >>: 피연산자의 각 자리를 오른쪽(>>) 또는 왼쪽(<<)으로 이동한다.

 

6. 그 외의 연산자

 

6.1 조건 연산자 ?

조건식의 평가결과에 따라 다른 결과를 반환한다.

 

6.2 대입 연산자 = op=

오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다. 그리고 저장된 값을 연산결과로 반환한다.

대입연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있다.