오버 플로우란?

해당 타입의 범위를 넘어서는 것을 오버플로우라고 한다.

오버플로우는 에러가 발생하지 않지만 예상과 다른 결과가 나온다.

 

정수형

정수형의 저장 형식과 범위

저장 형식

  • S : 부호 비트 (양 : 0, 음: 1)
  • N : 타입의 크기(bit)

범위

  • byte : -128 ~ 127 (2^7 ~ 2^7-1)
  • short : -32,768 ~ 32,767 (2^15 ~ 2^15-1)
  • int : - 2,147,483,648 ~ 0 ~ 2,147,483,647 (2^31 ~ 2^31-1)
  • long : -9,223,372,036,854,775,808 ~ 0 ~ 9,223,372,036,854,775,807 (2^63 ~ 2^63-1)

정수형의 선택 기준

  • JVM의 피연산자 스택(operand stack)이 피연산자를 4byte단위로 저장하기 때문에 int를 사용하는 것이 효율적이다.

정수형의 오버 플로우

2진수 1111 + 0001 = 10000이다.

하지만 2진수는 4bit를 범위로 가지고 있어서 0000이 된다.

반대로 0000 - 0001 = 9999이다.

 

즉, 최대값 + 1 = 최소값이 되고 최소값 - 1 = 최대값이 된다.

  부호 없는 정수 2진수 부호 있는 정수  
  0 0000 0  
  1 0001 1  
  2 0010 2  
  3 0011 3  
  4 0100 4  
  5 0101 5  
  6 0110 6  
  7 0111 7 오버 플로우 발생
  8 1000 -8
  9 1001 -7  
  10 1010 -6  
  11 1011 -5  
  12 1100 -4  
  13 1101 -3  
  14 1110 -2  
오버 플로우 발생 16 1111 -1  
0 0000 0  
  1 0001 1  
  2 0010 2  
  • 부호 없는 정수 -> char 0 ~ 65,535
  • 부호 있는 정수 -> short -32,768 ~ 32,767

실수형의 저장 형식과 범위

저장 형식

  • S (Sign) : 부호
  • E (Exponent) : 지수
  • M (Mantissa) : 가수

float

  • 저장 형식 : S(1) + E(8) + M(23) = 32bit (8byte)
  • 범위 : 1.4E-45 ~ 3.4E38

double

  • 저장 형식 : S(1) + E(11) + M(52) = 64bit (16byte)
  • 범위 : 4.9E-324 ~ 1.8E308

실수형의 오버 플로우, 언더 플로우

  • 오버 플로우 : 무한대 (infinity)
  • 언더 플로우 : 양의 최소값보다 작은 값으로 0이 된다.

'개발 언어 > Java' 카테고리의 다른 글

[Java] 형변환  (0) 2021.08.18
[Java] 실수형의 소수점 표현 방식과 BigDecimal  (0) 2021.08.13
[Java] 상수와 리터럴  (0) 2021.08.11
[Java] 기본형과 참조형  (0) 2021.08.11
[Java] 명명 규칙  (0) 2021.08.11

+ Recent posts