원본출처 : https://yaraba.tistory.com/929
원본 출처에서 백업용으로 남겨 둡니다.
위의 그래프에서 좌측은 C# 및 .Net 데이터 타입별 메모리 크기이고 우측은 표현 가능한 값의 범위입니다. float, Single, double, Double, decimal, Decimal 타입을 부동소수점(Floating point) 타입이라고 하고 byte, int 등의 나머지 타입을 고정소수점(Fixed point) 타입이라 하는데 부동소수점은 소수점을 고정시키지 않고 유효숫자를 나타내는 가수(假數) 부분과 소수점의 위치를 나타내는 지수(指數) 부분으로 실수를 저장하는 방식입니다. 근사값을 표현하기 때문에 표현 가능한 값의 범위가 고정 소수점에 비해서 비교가 되지 않을 정도로 넓습니다.
특이한 것은 Decimal 타입인데 float나 double 타입에 비해서 메모리 크기가 4배 및 2배에 이르지만 우측의 그래프에서 확인 할 수 있듯이 표현 범위는 오히려 작습니다. 이유는 유효숫자를 나타내는 가수 부분의 표현 범위를 늘이고 지수 부분을 줄였기 때문으로 금액 계산등에 적절하게 사용할 수 있습니다. 그래서 단순 카운트나 인덱스등의 용도, 즉 소수점의 개입이 전혀 없는 곳에는 고정 소수점을 사용하는 것이 적절하고 이율, 각도 계산등 실수 연산이 필수적인 곳에서는 부동 소수점을 사용하는 것이 적절합니다. 다만 표현 범위가 넓은 것은 좋겠지만 그만큼 메모리를 비롯한 시스템 자원의 소비도 커지므로 불필요한 낭비를 막으려면 용도에 맞는 데이터 타입 선택이 필요하겠습니다.
다음의 테이블은 C# 및 .NET 타입별 메모리의 크기와 표현 범위를 나열한 것입니다.
T 타입 | 크기(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 | 문자열 |
'컴퓨터내삶의이유 > 개발' 카테고리의 다른 글
임시 (0) | 2021.01.10 |
---|---|
무료로 홈페이지 문의하기 기능 쉽게 구현하는 방법 (Gmail, PHPMailer 활용) (6) | 2019.01.04 |
이슈트레킹툴 WebIssues 사용자 비밀번호 리셋 방법 (0) | 2018.11.19 |
c# 프로그램 실행중 동적으로 컨트롤 추가 및 제거 하는 방법 (0) | 2018.08.02 |
ODP.NET Oracle.ManagedDataAccess.Client.OracleDbType 열거형과 Oracle전용 데이터형 매칭하는 방법 (0) | 2018.01.19 |