자료형을 사용하는 이유
각 자료형마다 차지하는 메모리의 크기가 다르기 때문에 알맞은 자료형을 사용함으로써 메모리의 낭비를 줄일 수 있다.
정수형 기본 타입
데이터 형식 | 설명 | 크기(바이트) | 범위 |
byte | 정수 | 1 (8비트) | 0 ~ 255 |
sbyte | 부호 있는 정수 | 1 (8비트) | - 128 ~ 127 |
short | 작은 정수 | 2 (16비트) | - 32,768 ~ 32,767 |
ushort | 부호없는 작은 정수 | 2 (16비트) | 0 ~ 65,535 |
int | 정수 | 4 (32비트) | - 2,147,483,648 ~ 2,147,483,647 |
uint | 부호없는 정수 | 4 (32비트) | 0 ~ 4,294,967,295 |
long | 큰 정수 | 8 (64비트) | - 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | 부호없는 큰 정수 | 8 (64비트) | 0 ~ 18,446,744,073,709,551,615 |
char | 유니코드 문자 | 2 (16비트) |
실수형 기본 타입
데이터 형식 | 설명 | 크기(바이트) | 범위 |
float | 단일 정밀도 부동 소수점 형식 (7개의 자릿수) |
4 (32비트) | -3.402823e38 ~ 3.402823e38 |
double | 복수 정밀도 부동 소수점 형식 (15~16개의 자릿수) |
8 (64비트) | -1.79769313486232e308 ~ 1.79769313486232e308 |
decimal | 29자리 데이터를 표현할 수 있는 소수 형식 | 16 (128비트) | +-1.0 * |
실수형 표현 방식
고정 소수점(decimal)
- 처음 1비트는 sign(부호). 양수는 0, 음수는 1입니다.
- 다음 15비트는 integer part(정수부)
- 다음 16비트는 fractional part(소수부)
- 그리고 정수부와 소수부의 경계를 소수점의 위치라고 생각하고 2진수로 변환된 수를 그대로 넣으면 됩니다.
- 마지막으로 남는 자리는 모두 0으로 채우면 됩니다.
장점
- 부동 소수점 방식보다 정확합니다. - 지수 표현 방식이 아니기 때문에 정확한 값이 표현 가능합니다.
단점
- 정수부와 소수부가 고정되어있어 큰 자리수의 소수는 다루기 힘듭니다.
코드 사용 예시
decimal myDecimal = 123.45m;
부동 소수점(float,double)
- 2진수를 정규화(normalize) 합니다.
- 처음 1비트는 sign(부호)를 나타냅니다 (0은 양수, 1은 음수).
- 다음 8비트는 exponent(지수부)를 나타냅니다. 정규화 과정에서 얻어낸 지수에 bias를 더한 값으로 채웁니다.
- 다음 23비트는 mantissa(가수부)를 나타냅니다. 소수 부분의 값으로 채웁니다.
장점
- 메모리 관리가 효율적이다
단점
- 정확하지않다 (조금의 오차 발생) : 2^?라는 지수 표현 방식은 0이라는 값에 가까워 질 수는 있지만 정확히 0이 될 수는 없기 때문입니다.
정규화 예시
Exponent
정규화가 완료된 지수를 Exponent 부분에 바로 넣으면 안됩니다. IEEE 754 표준에서는 32비트로 실수를 표현할 때는 127(10)의 값을 더하고 그 값을 2진수로 변환하여 넣어야 합니다. 이러한 이유는 음수를 대처하기 위해서 입니다. 따라서 IEEE 754 표준에서는 8 비트로 음수와 양수 모두를 표현하기 위한 하나의 장치로 bias 라는 값을 두었습니다. 이를 통해 exponent 부분은 항상 unsigned(0과 양수) 값만 가지게 셋팅을 하는데요. 8bit는 256개의 숫자를 표현 할 수 있으므로 unsinged 값의 범위는 10진수 0~255가 되겠습니다.
- 0~127 구간은 음수 (실제 exponent는 -127~0)
- 128~255 구간은 양수 (실제 exponent는 1~128)
float myFloat = 12.34f;
double myDouble = 12.345;
문자형 기본 타입
데이터 형식 | 설명 | 크기 |
char | ' ' | 한글자 |
string | " " | 정해져있지않음 |
논리형 기본 타입
데이터형식 | 설명 | 크기 (바이트) | 범위 |
bool | 논리 형식 | 1 (8비트) | true,false |
도움이 된 사이트
https://gguguk.github.io/posts/fixed_point_and_floating_point/
CS50 - 고정 소수점(fixed point)과 부동 소수점(floating point)
최근 사내에서 CS50 스터디를 시작했습니다. 본 포스팅은 CS50의 두번째 주제인 ‘C언어’ 강의를 듣다가 평소 궁금했던 고정 소수점(fixed point)과 부동 소수점(floating point)에 대해 추가적으로 정리
gguguk.github.io
'c# > 문법' 카테고리의 다른 글
C# 문법 - 재귀함수 (0) | 2024.11.29 |
---|---|
C# 문법 - 자료형 변환 (캐스팅 , 문자에서 숫자 , 숫자에서 문자) (0) | 2024.11.26 |
C# 문법 02 - 조건문(if) 과 반복문(While) (0) | 2024.11.26 |