3. 이항 연산자, 삼항 연산자

고은·2022년 8월 2일
0

자바 초보 탈출기

목록 보기
11/14

이항 연산자

피연산자가 두 개인 연산자를 말하며 산술 연산자, 문자열 연결 연산자, 대입 연산자, 비교 연산자, 논리 연산자, 비트 이동 연산자 등이 있다.

산술 연산자 (+,-,*,/,%)

우리가 일반적으로 말하는 사칙연산자를 말한다.
boolean을 제ㅐ외한 모든 기본 타입에 사용 가능

long 타입을 제외한 정수타입 (byte, short, char) 연산은 모두 int 타입으로 산출되고
피연산자중 하나라도 실수 형이 존재한다면 실수타입 (double)으로 산출된다.
JVM가 기본적으로 32비트 단위로 계산하기 때문이다.

산술 연산 주의 사항

1. 오버 플로우 탐지

연산 후의 산출값이 산출 타입으로 충분히 표현 가능한지 살펴봐야 한다.
산출 타입으로 표현할 수 없는 값이 산출되었을 경우, 오버플로우가 발생하고 쓰레기값을 얻을 수 있기 때문이다.

코드에서 피연산자의 값을 직접 리터럴로 주는 경우는 드물다.
대부분은 사용자로부터 입력받거나 프로그램 실행 도중에 생성되는 데이터로 산술 연산이 수행된다.
이런 경우 바로 산술 연산자를 사용하지 말고 메소드를 이용하는 것이 좋다.
메소드는 산술 연산을 하기 전에 피연산자들의 값을 조사해서 오버플로우를 탐지할 수 있기 때문이다.

2. 정확한 계산은 정수 사용

정확한 계산이 필요하다면 정수 연산으로 변경해서 계산해야 한다.
부동소수점 (실수)는 사용하지 않아야 한다.

3. NaN과 Infinity 연산

/과 %을 사용할 경우 좌측 피연산자가 정수일 경우 우측 피연산자는 0을 사용할 수 없다.
컴파일은 정상적으로 되지만, 실행 시 예외가 발생한다.

/ 연산의 결과는 Infinity
% 연산의 결과는 NaN
(연산 결과를 확인하기 위해 Double.isInfinite(), Double.isNaN() 메소드를 사용한다. -> true, false 리턴)

4. 입력값의 NaN 검사

부동소수점 (실수)를 사용자로 부터 입력받을 때는 반드시 NaN 검사를 한다.
NaN은 산술 연산이 가능하기 때문에 주의해야 한다.

NaN인지 검사할때 == 연산자를 사용하면 안된다.
NaN은 != 연산자를 제외한 모든 비교 연산자를 사용할 경우 false 값을 반환하기 때문이다.
따라서 Double.isNaN() 메소드를 이용하는 것이 좋다. (입력 값이 NaN이면 true리턴)

문자열 연결 연산자 (+)

ex) String str1 = "JDK" + 6.0
System.out.println(str1);
-> JDK6.0

비교 연산자 (<,<=,>,>=,==,!=)


대소 연산자는 boolean 타입을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용될 수 있다. 산출값으로 boolean 타입을 반환한다. (true/ false)
비교 연산자는 흐름 제어문인 조건문, 반복문에 주로 이용되어 실행 흐름을 제어할 때 사용된다.

피연산자가 char 타입이면, 유니코드 값으로 비교 연산을 수행한다.
'A'<'B' // (65<66) true
비교 연산 수행 전, 타입 변환을 통해 피연산자들의 타입을 일치시킨다.
(자동 타입 변환 -> 큰 타입으로)

논리 연산자

boolean 타입에만 사용 가능

&& = 앞의 피연산자가 false 라면 뒤의 피연산자를 평가하지 않고 바로 false 반환한다 (효율)
& = 두 피연산자 모두를 평가해서 산출

|| = 앞의 피연산자가 true 라면 뒤의 피연산자를 평가하지 않고 바로 true 반환 (효율)
| = 두 피연산자 모두 평가

흐름 제어 문인 조건문, 반복문 등에서 이용된다.

비트 연산자

데이터를 비트 단위로 연산하기 때문에 0과 1이 피연산자가 된다.
0과 1로 표현이 가능한 정수 타입만 비트 연산을 할 수 있다.
(float, double은 비트 연산을 할 수 없다.)

기능에 따라 비트 논리 연산자 (&,|,^,~), 비트 이동 연산자(<<,>>,>>>)로 구분한다.

비트 논리 연산자 (&,|,^)

피연산자가 boolean 타입일 경우에는 일반 논리 연산자
정수 타입일 경우 비트 논리 연산자로 사용

비트 이동 연산자 (<<,>>,>>>>)

비트 이동 연산자는 정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동 시키는 연산을 수행한다.

대입 연산자

대입 연산자는 모든 연산자들 중에서 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행된다.

삼항 연산자

세 개의 피연산자를 필요로 하는 연산자를 말한다.

profile
비전공자 코린이의 개발 일지 🏋️‍♀️

0개의 댓글