728x90
반응형
자바의 기본형 변수는 메모리 스택 영역에 그 값을 바로 저장한다.
(별도의 힙 메모리 영역에 값을 저장하고, 스택 영역의 변수가 이를 참조하는 참조형 변수와 차이)
이 기본형 변수의 크기 단위는 바이트(1바이트=8비트)로 표시한다.
8비트는 2^8 = 256개의 값을 표현할 수 있다.
이 값들은 부호가 있을 때와 없을 때 범위가 달라지는데,
각 자료형이 얼마의 값 범위를 내포하는지 알아보자.
1) 부호가 있는 경우 (Signed)
-부호가 있는 형 종류 : byte, short, int, long
-가장 왼쪽의 비트를 부호 비트로 사용한다.
-정수형 데이터 타입에서 음수와 양수를 모두 표현 가능
-부호 비트가 0이면 양수, 1이면 음수
(= 2의 보수(2's complement) 표기법)
-범위 계산법 : -2^(n-1) ~ 2^(n-1) - 1 (n은 비트 수)
ex:) byte는 1바이트, 즉 8비트이므로 범위는 -2^7 ~ 2^7 - 1
=> -128 ~ 127
int는 4바이트, 즉 32비트이므로 범위는 -2^31 ~ 2^31 - 1
=> -2,147,483,648 ~ 2,147,483,647
2) 부호가 없는 경우 (Unsigned)
- 부호가 없는 형 종류 : char
-부호가 없는 경우, 모든 비트를 값 표현에 사용한다. (부호 비트 존재X)
-범위 계산법 : 0 ~ 2^n - 1 (n은 비트 수)
ex:) char는 2바이트, 즉 16비트이므로 범위는 0 ~ 2^16 - 1
=> 0 ~ 65,535
■ 기본형 데이터 타입 요약
-데이터 타입크기 (바이트)비트 수 범위
타입 | 바이트 | 비트 | 범위 |
byte | 1 | 8 | -128 ~ 127 |
short | 2 | 16 | -32,768 ~ 32,767 |
int | 4 | 32 | -2,147,483,648 ~ 2,147,483,647 |
long | 8 | 64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 4 | 32 | 1.4E-45 ~ 3.4028235E38 |
double | 8 | 64 | 4.9E-324 ~ 1.7976931348623157E308 |
char | 2 | 16 | 0 ~ 65,535 (유니코드) |
boolean | 명시되지 않음 | 명시되지 않음 | true 또는 false |
■ 기본형 변수 할당 테스트
-각 타입의 최솟값을 부여해 출력해본다.
-char를 제외한 기본형 변수는 모두 - 범위까지 포함하여 담는 것을 확인할 수 있다.
public class SignedTypesExample {
public static void main(String[] args) {
byte byteVal = -128;
short shortVal = -32768;
int intVal = -2147483648;
long longVal = -9223372036854775808L;
char charVal = 0; // 부호 없는 타입
System.out.println("byte value: " + byteVal);
System.out.println("short value: " + shortVal);
System.out.println("int value: " + intVal);
System.out.println("long value: " + longVal);
System.out.println("char value: " + (int) charVal); // char 값을 int로 출력
}
}
결과
byte value: -128
short value: -32768
int value: -2147483648
long value: -9223372036854775808
char value: 0
각 자료형의 크기 범위를 알아두면
코테나 개발 시에 효율적인 코딩이 가능할 것 같다.
반응형
'Programming Languages > Java' 카테고리의 다른 글
[JAVA] 절차지향 언어와 가장 큰 차이점 (0) | 2024.07.29 |
---|---|
[JAVA] 자바 컴파일 특징을 JDK 구성 요소를 통해 알아보자 (0) | 2024.07.28 |
[JAVA] BufferedReader, BufferedWriter 사용해야 하는 이유 (0) | 2024.06.20 |
[Java] 자바 상속 구현 / extends, implements의 차이? / 개념과 사용법 정리 (1) | 2024.02.08 |
[JAVA] 객체 지향 언어(Object-Oriented Programming, OOP) 란? (1) | 2024.02.08 |