chap 2.4 기본형(primitive type)
2.4.1 논리형 - boolean
- 논리형의 종류는 boolean 한 가지!
- true/false 중 하나를 저장하며 default = false
- 대답, 스위치 등의 논리구현에 사용
- 원래는 1 bit 만으로 충분하지만 자바의 경우 데이터의 최소단위가 byte 기 때문에
1 byte의 크기를 갖는다.
- 대소문자가 구분되기 때문에 False 와 false는 다르다.
2.4.2 문자형 - char
- 문자형의 종류도 'char' 한 가지!
- 문자를 저장하기 위한 변수 선언시 사용
- 단 하나의 문자만을 저장할 수 있다!
char ch = 'A'
- 문자 'A'를 char 변수 ch에 저장
- 문자가 저장된 것이 아닌 '문자의 유니코드(정수)'가 저장된것!
- A의 유니코드 65가 저장되었다.
- '' 없이 65를 입력하면 동일한 결과를 얻는다.
- 변수에 저장된 값을 int로 변환하면 유니코드를 알 수 있다.
- 특수문자는 \t 와 같이 '\'를 입력하여 저장한다.
- char 타입의 크기는 2 byte 2^16개의 코드 사용 가능하다.
- 인코딩과 디코딩
- 문자 -> 유니코드 : 인코딩
- 유니코드 -> 문자 : 디코딩
- ASCII
- EXTENDED ASCII 와 한글
- code page
- Unicode
2.4.3 정수형 - byte, short, int, long
- byte 1 byte
- short 2 byte
- int 4 byte (기본 자료형)
- long 8 byte
-
정수형의 표현형식과 범위
- 정수형의 경우 맨처음 1비트는 S로 부호 비트를 말하고(양수는 0 음수는 1) n-1비트의 경우 타입의 크기를 말한다.
- n 비트로 표현가능한 정수의 개수 : 2^n 개
- 표현가능한 정수의 범위 : -2^n-1 ~ 2^n-1
-
정수형의 선택기준
- 정수형 변수를 선언시 Int 타입으로 하고, Int의 범위(+- 20억)을 넘을 경우 Long을 사용한다.
-
정수형의 overflow
- overflow : 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것
- 10진수의 경우 4자리 표현일 경우 9999 다음의 10000을 표현할 수 없다.
- 정수형 타입의 경우 최대값 +1 은 최소값이고 그 반대도 마찬가지이다.
- 4bit 2진수의 경우 0000과 1111 사이를 반복한다.
-
부호있는 정수의 overflow
- 부호있는 정수는 부호비트가 0에서 1이될 때 오버플로우가 발생한다.
2.4.4 실수형 - float, double
-
실수형의 범위와 정밀도
- float
-
실수형의 저장형식
-
부호(sign bit)
-
지수(exponent)
-
가수(mantissa)
- 부동소수점의 오차
- 파이와 같은 무한소수의 존재로 실수는 오차가 발생할 수 있다.
- 2진수로 저장하기때문에 10진수에서는 유한소수여도 2진수는 무한소수일 수 있다.
- 정규화 : 2진수로 변환된 실수 저장시 '1.xxx * 2^n'의 형태로 변환하는 과정
- 정규화된 2진 실수는 항상 '1.'으로 시작한다.
-> 이 때문에 뒤의 23자리 소수부분이 가수(mantissa)로 저장되고 그 이후는 잘린다.
따라서, 잘려나간 값에 의해 발생 가능한 최대 오차는 2^-23이다. 즉 10진수의 소수점 이하 6자리, 총 7자리가 float의 정밀도이다.