공부/Java

[Java-02] 변수(Variable) - 기본형(Primitive type)

줭♪(´▽`) 2021. 1. 31. 23:50

1. 논리형(boolean)

- true / false

- 기본값(default)는 False

- 논리구현에 사용

- 1 bit로도 충분하지만, 자바에서는 최소단위가 byte이기 때문에 1 byte로 표현

- 자바에서는 대소문자가 구별되기 때문에 TRUE와 true는 다름, true가 맞는 표현

 

boolean power = true; (O)
boolean checked = False; (X)

 

 

자료형 저장 가능한 값의 범위 크기 (bit) 크기 (byte)
boolean false, true 8 1

 

2. 문자형(char)

- 단 하나의 문자만을 저장

- 실제로는 문자의 유니코드(정수)가 저장

 

char ch = 'A';
char ch = 65;
-> 동일한 결과

 

- 2 byte(=16 bit)로 표현

 

 

16비트로 표현할 수 있는 정수의 개수 :  216개 (65526개)
short타입의 표현범위 : -215 ~ 215 - 1 (-32768~32767)
char타입의 표현범위 : 0 ~ 216 - 1 (0~65535)

 

- 특수 문자

 

특수 문자 문자 리터럴
tab t
backspace \b
form feed \f
new line \n
carrige return \r
역슬래쉬(\)
작은따옴표('') \'
큰따옴표("") \"
유니코드(16진수)문자 \u유니코드 ( ex) '\u0041' )

 

 

- 문자 인코딩(Encoding) : 문자를 코드로 변환하는 것

- 문자 디코딩(Decoding) : 코드를 문자로 변환하는 것

 

- 아스키(ASCII, American Standard Code for Inforamtion Interchange) : 정보교환을 위한 미국 표준 코드, 128개(=27)의 문자 집합을 제공하는 7 bit 부호 (0~9, A~Z, a~z가 연속적으로 배치되어 있음)

- 확장 아스키(Extended ASCII) : 7 bit인 아스키의 남는 공간 1 bit에 문자를 추가로 정의한 것

- 코드 페이지(code page, cp) : 확장 아스키의 256개 문자를 어떤 숫자로 변환할 것인지 적어놓은 문자 코드표

- 유니코드(Unicode) : 전 세계의 모든 문자를 하나의 통일된 문자집합으로 표현하기 위한 코드

- 자바에서는 UTF-16(모든 문자를 2 byte의 고정크기로 표현) 사용

 

 

자료형 저장 가능한 값의 범위 크기 (bit) 크기 (byte)
char 'u0000' ~ 'uffff' (0~216-1, 0~65535) 16 2

 

 

3. 정수형(byte, short, int, long)

1) 크기 비교

byte(1 byte)    <    short(2 byte)    <    int(4 byte)    <      long(8 byte)

-> 기본 자료형(default data type)은 int

 

2) 표현방식과 범위

정수형의 표현방식

S : 부호 비트 (양수는 0, 음수는 1)

n : 타입의 크기 (단위: bit)

 

 

정수형의 표현형식 (n bit) 종류 값의 개수
0, 양수 2n-1
음수 2n-1

 

n비트로 표현할 수 있는 정수의 개수 : 2n개 (= 2n-1개 + 2n-1개)
n비트로 표현할 수 있는 부호있는 정수의 범위 : -2n-1개 ~ 2n-1 - 1

-1을 빼는 이유는 0이 포함되기 때문
ex) byte 타입
표현할 수 있는 정수의 개수 : 256개
표현할 수 있는 부호있는 정수의 범위 : -128 ~ 127

 

 

자료형 저장 가능한 값의 범위 크기 (bit) 크기 (byte)
byte -128 ~ 127 (-27~27-1) 8 1
short -32,768 ~ 32,767 (-215~215-1) 16 2
int -2,147,483,648 ~ 2,147,483,647 (-231~231-1) 32 4
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 (-263~263-1) 64 8

 

 

3) 정수형의 선택기준

- 정수형 변수를 선언할 때는 int타입

- int의 범위(약 ±20억)를 넘어설 때는 long타입

- byte타입short타입은 성능보다 저장공간을 절약하는데 사용

 

4) 오버플로우

- 오버플로우(overflow) : 해당 타입이 표현할 수 있는 값의 범위를 넘어서 예상치 못한 결과를 얻는 것

- 오버플로우가 발생하지 않게 충분한 크기의 타입을 선택해서 사용해야 함

- 부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생

 

 

4. 실수형(float, double)

1) 범위와 정밀도

- float 타입은 4 byte, double 타입은 8 byte 표현 가능

 

자료형 저장 가능한 값의 범위 크기 (bit) 크기 (byte)
float 1.4E-45 ~ 3.4E38 (1.4×10-45~3.4×1038) 32 4
double 4.9E-324 ~ 1.8E308 (4.9×10-324~1.8×10308) 64 8

 

- float 타입의 정밀도는 7자리 = 7자리의 10진수를 오차없이 저장할 수 있음

- double 타입의 정밀도는 15자리 = 15자리의 10진수를 오차없이 저장할 수 있음

- float 대신 double을 사용하는 경우는 대부분 저장하려는 '값의 범위' 때문이 아니라 '보다 높은 정밀도'가 필요해서임

 

 

2) 저장형식

- 부동소수점수(floating-point) 형태로 저장

- 부호(Sign), 지수(Exponent), 가수(Mantissa)로 이루어짐

 

- 부호(Sign) : 0이면 양수, 1이면 음수

- 지수(Exponent) : 부호있는 정수 (float은 -127~128, double은 -1023~1024)

- 가수(Mantissa) : 실제 값을 저장하는 부분, 10진수로 7자리(float), 15자리(double)의 정밀도로 저장 가능

 

 

float 타입의 표현방식 (총 32 bit)

S : 부호 비트 (양수는 0, 음수는 1) (1 bit)

E : 지수 (8 bit)

M : 가수 (23 bit)

 

 

double 타입의 표현방식 (총 64bit)

S : 부호 비트 (양수는 0, 음수는 1) (1 bit)

E : 지수 (11 bit)

M : 가수 (52 bit)

 

 

 

 

참고 - Java의 정석 3rd Edition (저자 : 남궁성, 출판 : 도우출판)