2. 데이터의 종류(3) - 부동 소수, 문자와 문자열, 논리 형식
이전 글에 이어서 부동 소수점 형식부터 설명하는 글이다.
부동 소수점 형식
소수점이 고정되어 있지 않고 움직이면서 수를 표현한다는 뜻에서 지어진 이름
소수점을 이동시켜 수를 표현하면 고정 시켰을 때보다 더 제한된 비트를 이용해서 훨씬 넓은 범위의 값을 표현
부동 소수점 형식은 정수뿐 아니라 유리수를 포함하는 실수 영역의 데이터를 다룬다. ex) 3.14 / 11.08
부동 소수점 형식은 두가지 단점때문에 정수 형식을 대체하지 못한다.
1. 소수점을 표현하기 위해 일부 비트를 사용(게다가 부호표현에 비트 사용)하기 때문에
같은 크기의 정수 계열 형식과 같은 크기의 수를 표현할 수 없다.
2. 산술 연산 과정이 정수 계열 형식보다 보잡해서 느리다.
이러한 이유 때문에 무조건 부동 소수점 형식을 사용하는 건 현명하지 못하다.
데이터 형식 | 설명 | 크기(바이트) |
float |
단일 정밀도 부동 소수점 형식 7개의 자릿수만 다룰 수 있다 |
4(32비트) |
double |
복수 정밀도 부동 소수점 형식 15~16개의 자릿수를 다룰 수 있다 |
8(64비트) |
부동 소수점 형식은 위 표와 같이 float과 double 두가지가 있다.
표를 보면 "단일 정밀도"와 "복수 정밀도"라는 말이 보인다. 이 말은 부동 소수점 형식의 특징이자 한계이다.
float 형식은 수를 표현할 때 1비트를 부호 전용으로 사용하고, 가수부 23비트를 수를 표현하는데 사용.
그리고 나머지 지수부 8비트를 소수점의 위치를 나타내기 위해 사용한다.
float은 4바이트만 가지고 수를 표현하지만 굉장히 넓은 범위의 수(10의38승)를 다룬다.
하지만 유효숫자는 딱 7자리밖에 되질 않습니다. 무려 10의 38승이나 되는 수를 다루는데 유효숫자는 7밖에 없으니
7자리 이상의 수는"대략적으로" 표현하는 것입니다. 그래서 float이 한정된 정밀도, 즉 단일 정밀도라 합니다.
double은 float보다 두 배 큰 8바이트이기 때문에 보다 더 정밀하다.
그래서 부동 소수점 형식을 사용할 때는 float보다는 double을 사용하는게 좋다.
왜냐하면 float에 비해 데이터의 손실이 적기 때문입니다. double을 사용하고도 데이터의 손실이 발생한다면
decimal 형식을 사용하면 됩니다. decimal 형식은 이 글에서 다루지 않는다.
문자 형식과 문자열 형식
char 형식은 개별 문자를 표현하기 위해, string 형식은 문자열을 표현하기 위해 사용한다.
char a = '안';
char b = '녕';
string c = "안녕";
char 형식은 작은 따옴표, string 형식은 큰 따옴표를 사용해서 데이터를 대입한다.
논리 형식
논리 형식이 다루는 데이터는 "참(true)" 과 "거짓(false)" 딱 두가지.
조건문에서 많이 사용하며 프로그래밍에서 가장 많이 사용되는 데이터 형식 중 하나