본문 바로가기

IT/JAVA

JAVA 기본 자료형의 종류와 크기에 대해서

변수란 하나의 값을 저장할 수 있는 메모리 공간입니다.

 

변수에는 기본 자료형과 참조 자료형이 있습니다.

기본 자료형값 자체를 가지고 있는 변수를 의미하고 참조 자료형주소값을 가지고 있는 변수를 의미합니다.

 

오늘은 기본 자료형에 대해 알아보겠습니다.

기본 자료형 종류와 크기

JAVA의 기본형은 총 8가지로 byte, short, int, long, float, double, char, boolean이 있습니다.

종류/크기 1byte 2byte 4byte 8byte
정수형 byte short int long
실수형     float double
문자형   char    
논리형 boolean      

int와 double은 각각 정수형과 실수형의 default 타입입니다.

 

표현 범위

1byte = 8bit 이고, 1bit로 나타낼 수 있는 수는 0과 1, 두 가지입니다.

그러면 2bit로 나타낼 수 경우의 수는 몇일까요? 

1bit 1bit
0 0
0 1
1 0
1 1

표와 같이 4가지, 즉 2^2입니다.

따라서 N-bit로 나타낼 수 있는 값의 개수는 2^N가지라고 생각하면 됩니다.

 

이 개념을 이용해서 크기를 이용해 각 타입의 범위를 구할 수 있습니다.

 

먼저, 정수부터 살펴보겠습니다.

정수

정수는 두 가지로 구분할 수 있습니다.

1. 부호가 없는 경우

2. 부호가 있는 경우

 

부호가 있냐 없냐는 음수의 유무로 따지면 됩니다.

부호가 있는 경우엔 부호 비트(1bit)를 생각해야 합니다.

 

우선 크기별로 n비트로 표현할 수 있는 값의 개수를 알아보겠습니다.

크기 값의 개수
1byte = 8bit 2^8 = 256가지
2byte = 16bit 2^16 = 65,536가지
4byte = 32bit 2^32 = 4,294,967,296가지
8byte = 64bit 2^64 = 18,446,744,073,709,551,616가지

 

부호가 없는 정수의 범위

부호가 없는 정수의 범위의 경우 0~ 시작하기 때문에 0~2^N-1로 표현할 수 있습니다.

크기 부호 없는 정수의 범위
1byte = 8bit 0~2^8-1 0~255
2byte = 16bit 0~2^16-1 0~65,535
4byte = 32bit 0~2^32-1 0~4,294,967,295
8byte = 64bit 0~2^64-1 0~18,446,744,073,709,551,615

 

부호가 있는 정수의 범위

부호가 있는 byte 정수

부호가 있는 정수의 경우, 맨 앞 1bit를 부호 비트로 사용하게 됩니다.

부호 비트가 1이면 음수, 0이면 양수를 나타내게 됩니다.

범위를 구할 땐 부호 비트를 제외(2^(N-1))하고 구한 후, 음수 영역도 나타내면 됩니다.

 

byte 타입으로 예를 들면 다음과 같습니다.

 

크기 부호 있는 정수의 범위
1byte = 8bit -2^7 ~ (2^7)-1 -128 ~ 127
2byte = 16bit -2^15 ~ (2^15)-1 -32768 ~ 32767
4byte = 32bit -2^31 ~ (2^31)-1 2^31 = (2^10)^3 * 2
2^10 = 1024 => 약 10^3
(10^3)^3 * 2 = 10^9 * 2 => 약 20억

-20억 ~ 20억
8byte = 64bit -2^63 ~ (2^63)-1 2^63 = 2^3 * 2^60 => 약 2^3 * (10^3)^6
2^3 * 10^18 => 약 800경

-800경 ~ 800경

 

실수

실수는 부동소수점을 이용해서 표현합니다.

2진수로는 소수를 정확하게 표현할 수 없기 때문에 중간에 표현할 수 없는 범위가 존재합니다.

 

범위를 계산하는 방법이 존재하지만, 부동 소수점에 대해 이해해야 하기때문에 여기선 범위만 나타내겠습니다.

종류 실수의 범위
float -3.4*10^38 ~ -1.4*10^-45, 1.4*10^-45 ~ 3.4*10^38
double -4.9*10^-324 ~ -1.8*10^308, 1.8*10^308 ~ 4.9*10^-324

 


위에서는 byte 크기를 기준으로 범위를 구했기 때문에 헷갈릴 수 있어서 하나로 정리해보겠습니다.

종류 타입 범위
논리형 boolean 1byte지만, 0 or 1로만 나타냄
문자형 char 2byte, 부호가 음 => 0~65,535
정수형 byte 1byte, 부호가 음 => -128 ~ 127
short 2byte, 부호가 음 => -32768 ~ 32767
int 4byte, 부호가 음 => 대략 -20억 ~ 20억
long 8byte, 부호가 음 => 대략 -800경 ~ 800경
실수형 float 4byte, -3.4*10^38 ~ -1.4*10^-45, 1.4*10^-45 ~ 3.4*10^38
double 8byte, -4.9*10^-324 ~ -1.8*10^308, 1.8*10^308 ~ 4.9*10^-324

따라서 자료형의 크기만 안다면, 실수를 제외하고는 범위를 구할 수 있습니다.

 

범위를 알고 있으면 변수를 선택할 때 도움이 됩니다.

특히 int형은 자주 쓰이기 때문에 수가 크더라도 대략 -+20억이라고 생각하고 있으면 이해하기 쉽습니다.

 

잘못된 정보가 있거나, 다른 의견이 있으시다면 피드백 부탁드립니다. 감사합니다 :)