BackEnd/Java

[Java] 이것이 자바다 - 3장 연산자

kangminhyuk1111 2024. 6. 8. 20:30

오버플로우(overflow)와 언더플로우(underflow)

오버플로우는 타입이 허용하는 최대 값을 벗어나는 것을 말한다. 반대로 언더플로우는 타입이 허용하는 최소값을 벗어나는 것을 말한다.
정수 타입 연산에서 오버플로우 또는 언더ㅡㄹ로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지는 않고 해당 정수타입의 최소값 또는 최대값으로 되돌아간다.

예를 들어, byte 타입의 최대값인 127에 1을더하면 오버플로우 -127에 1을 빼버리면 언더플로우다.

정확한 계산은 정수연산으로

산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는 것이 좋다.
정확한 연산을 원한다면 정수연산으로 변경해서 다음과 같이 계산하는 것이 좋다.

나눗셈 연산의 오류처리

나눗셈 또는 나머지 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 에외가 발생하지만,
좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f 일 경우 예외가 발생하지 않고 infinity 혹은 NaN이 된다.

isInfinite(변수) 혹은 isNaN(변수) 로 예외처리를 해주어야 한다.

논리 연산자 &와 &&의 차이

논리곱 연산자인 && 연산자는 한개만 사용하는 & 과 둘다 사용하는 && 이 존재한다.

두 연산자 모두 산출 결과는 같지만 계산하는 방식이 다르다.

&&는 앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false를 산출한다.
하지만 &는 두 피연산자 모두를 평가해서 산출 결과를 낸다. 따라서 &보다 && 연산자가 좀 더 효율적이다.

비트 논리 연산자

비트 논리 연산자는 byte, short, char 타입 피연산자를 int 타입으로 자동 변환한 후 연산을 수행한다. 따라서 연산 결과도 int 타입이 되므로 변수에 대입해야 한다.

삼항(조건) 연산자

삼항 연산자는 총 3개의 피연산자를 가진다. ? 앞의 피연산자에는 boolean 변수 또는 조건식이 오므로 조건 연산자라고도 한다.
이 값이 true이면 : 기준 앞의 피연산자가 나가고 false라면 반대로 : 기준 뒤의 피연산자가 나간다.

반응형