정수 타입과 실수 타입
정수 타입
정수 타입은 숫자를 나타내는 타입으로, byte, short, int, long의 총 4개의 타입으로 분류합니다.
byte < short < int < long
// 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있습니다.
byte byteNum = 123;
short shortNum = 12345;
int intNum = 123456789;
long longNum = 12345678910L;
// 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생합니다.
byte byteNum = 130;
short shortNum = 123456;
int intNum = 12345678910;
// 숫자가 길면 언더바로 구분할 수 있습니다.
int intNum = 12_345_678_910;
long longNum = 12_345_678_910L;
정수형의 오버플로우와 언더플로우 (범위 순환)
- 오버플로우
자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 발생합니다. 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환합니다.
예 : 어떤 값이 byte형이고, byte형의 최대값인 127을 값으로 가지는 경우, 이 값에 1을 더하면 128이 되는 게 아니라, 최소값인 -128이 됩니다.
- 언더플로우
자료형이 표현할 수 있는 범위 중 최소값 이하의 값을 표현한 경우 발생합니다. 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환합니다.
예 : 어떤 값이 byte형이고, byte 형의 최소값인 -128을 값으로 가지는 경우, 이 값에 1을 빼면 -129가 되는 게 아니라, 최대값인 127이 됩니다.
실수 타입
실수는 소수점을 가지는 값을 의미하며, float형과 double형으로 분류합니다.
// float형 리터럴을 float형 변수에 할당
float num1 = 3.14f;
// double형 리터럴을 double형 변수에 할당 (double은 d를 붙여도 안붙여도 상관없습니다.)
double num2 = 3.141592d;
double num2 = 3.141592;
double형은 float형보다
더 큰 실수를 저장할 수 있습니다.
더 정확하게 저장할 수 있습니다.
= 정밀도가 더 높습니다.
실수형의 오버플로우와 언더플로우 (무한대이거나 0)
- 오버플로우
값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생하며, 이때 값은 무한대가 됩니다.
- 언더플로우
값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생하며, 이때 값은 0이 됩니다.