C#

2. 데이터의 종류(3) - 부동 소수, 문자와 문자열, 논리 형식

루체도 2020. 1. 25. 21:45

이전 글에 이어서 부동 소수점 형식부터 설명하는 글이다.

 

부동 소수점 형식

소수점이 고정되어 있지 않고 움직이면서 수를 표현한다는 뜻에서 지어진 이름

소수점을 이동시켜 수를 표현하면 고정 시켰을 때보다 더 제한된 비트를 이용해서 훨씬 넓은 범위의 값을 표현

부동 소수점 형식은 정수뿐 아니라 유리수를 포함하는 실수 영역의 데이터를 다룬다. 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)" 딱 두가지.

조건문에서 많이 사용하며 프로그래밍에서 가장 많이 사용되는 데이터 형식 중 하나