프로그래밍/JAVA

[JAVA] 연산자

daykim 2022. 10. 11. 21:29
참고 서적
이것이 자바다(개정판)

부호 연산자

정수 타입 연산의 결과는 int 타입이다. 부호 변경하는 것도 연산이므로 다음과 같이 대입해야 한다.

byte a = -b; // 컴파일 에러
int c = -d;

 

산술 연산자

  • 피연산자가 정수 타입 (byte, shor, char, int)이면 연산의 결과는 int
    즉 int 타입으로 자동 변환 후 연산된다.
  • 피연산자가 정수 타입이고 그 중 하나가 long 이면 연산의 결과는 long
  • 피연산자 중 하나가 실수 타입이면 결과는 실수 타입

 

오버플로우(overflow)

타입이 허용하는 최대값을 벗어나는 것

 

언더플로우 (underflow)

타입이 허용하는 최소값을 벗어나는 것

 

언더 || 오버 플로우 발생시

에러가 발생하지 않고, 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다.

ex) 

byte val = 127; \
val++; // 출력 : -128
byte value = -128;
value--; // 출력 : 127

 

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

산술 연산을 정확하게 하고 싶다면 실수 타입은 사용하지 않는 것이 좋다.

부동 소수점 방식을 사용하는 실수 타입은 계산이 정확히 되지 않는 일이 흔히 일어나기 때문이다.

 

나눗셈 연산 후 Nan과 Infinity 처리

정수를 0으로 나눌 때 예외가 발생

  • 무한대의 값을 정수로 표현할 수 없기 때문이다.

좌측 연산자가 실수이거나 우측 연산자가 0.0 || 0.0f 인 경우 예외 발생하지 않고 결과는 Infinity || NaN(Not a Number)이 된다.

  • 연산의 결과가 Infinity이거나 NaN인 경우를 확인하는 방법
  •  Double.isInfinite()
  •  Double.isNan()
    • 맞는 경우 : true
    • 아닌 경우 : false

 

비교 연산자

0.1f == 0.1 // 결과 false
  • 부동 소수점 방식을 사용하는 실수 타입은 0.1을 정확히 표현할 수 없다.
  • float type과 double type의 정밀도 차이가 있다.
  • 오른쪽 수를 (float)0.1로 강제 변환 후 비교해야한다.

문자열 비교

  • 문자열 같은지 검사 : 원본 문자열.equals(비교 문자열)
  • 문자열 다른지 검사 : ! 원본 문자열.equals(비교 문자열)

 

비트 논리 연산자

bit 단위로 논리 연산을 수행하기 때문에 0과 1이 피연산자가 되므로 2진수 0과 1로 저장되는 정수 타입만 피연산자가 된다.

부동 소수점 방식으로 저장되는 실수타입은 피연산자가 될 수 없다.

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 클래스  (0) 2023.01.14
[JAVA] 참조 타입  (2) 2022.11.08
[JAVA] 조건문과 반복문  (0) 2022.10.12
[JAVA] 변수와 타입  (0) 2022.10.10
[JAVA] JAVA란?  (0) 2022.10.06