티스토리 뷰

728x90


위의 그래프에서 좌측은 C# 및 .Net 데이터 타입별 메모리 크기이고 우측은 표현 가능한 값의 범위입니다. float, Single, double, Double, decimal, Decimal 타입을 부동소수점(Floating point) 타입이라고 하고 byte, int 등의 나머지 타입을 고정소수점(Fixed point) 타입이라 하는데 부동소수점은 소수점을 고정시키지 않고 유효숫자를 나타내는 가수(假數) 부분과 소수점의 위치를 나타내는 지수(指數) 부분으로 실수를 저장하는 방식입니다. 근사값을 표현하기 때문에 표현 가능한 값의 범위가 고정 소수점에 비해서 비교가 되지 않을 정도로 넓습니다. 


특이한 것은 Decimal 타입인데 float나 double 타입에 비해서 메모리 크기가 4배 및 2배에 이르지만 우측의 그래프에서 확인 할 수 있듯이 표현 범위는 오히려 작습니다. 이유는 유효숫자를 나타내는 가수 부분의 표현 범위를 늘이고 지수 부분을 줄였기 때문으로 금액 계산등에 적절하게 사용할 수 있습니다. 그래서 단순 카운트나 인덱스등의 용도, 즉 소수점의 개입이 전혀 없는 곳에는 고정 소수점을 사용하는 것이 적절하고 이율, 각도 계산등 실수 연산이 필수적인 곳에서는 부동 소수점을 사용하는 것이 적절합니다. 다만 표현 범위가 넓은 것은 좋겠지만 그만큼 메모리를 비롯한 시스템 자원의 소비도 커지므로 불필요한 낭비를 막으려면 용도에 맞는 데이터 타입 선택이 필요하겠습니다.


다음의 테이블은 C# 및 .NET 타입별 메모리의 크기와 표현 범위를 나열한 것입니다.


C# 및 .NET 타입 크기(byte) 값의 범위 비고
byte 1 0 ~ 255 고정소숫점
Byte 1 0 ~ 255 고정소숫점
sbyte 1 -128 ~ 127 고정소숫점
SByte 1 -128 ~ 127 고정소숫점
short 2 –32,768 ~ 32,767 고정소숫점
Int16 2 –32,768 ~ 32,767 고정소숫점
ushort 2 0 ~ 65,535 고정소숫점
UInt16 2 0 ~ 65,535 고정소숫점
int 4 –2,147,483,648 ~ 2,147,483,647 고정소숫점
Int32 4 –2,147,483,648 ~ 2,147,483,647 고정소숫점
uint 4 0 ~ 4,294,967,295 고정소숫점
UInt32 4 0 ~ 4,294,967,295 고정소숫점
long 8 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 고정소숫점
Int64 8 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 고정소숫점
ulong 8 0 ~ 18,446,744,073,709,551,615 고정소숫점
UInt64 8 0 ~ 18,446,744,073,709,551,615 고정소숫점
float 4 1.5E-45 ~ 3.4E+38(7자리 유효) 부동소숫점
Single 4 1.5E-45 ~ 3.4E+38(7자리 유효) 부동소숫점
double 8 5.0E-324 ~ 1.7E+308(15자리 유효) 부동소숫점
Double 8 5.0E-324 ~ 1.7E+308(15자리 유효) 부동소숫점
decimal 16 7.9E-28 ~ 7.9E+28(28자리 유효) 부동소숫점
Decimal 16 7.9E-28 ~ 7.9E+28(28자리 유효) 부동소숫점
char 2 or 4 UTF-16 문자
Char 2 or 4 UTF-16 문자
string ___ UTF-16 문자열
String ___ UTF-16 문자열



728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함