티스토리 뷰
안녕하세요 박스여우입니다.
C#마스터 세번째 강좌 데이터저장과 종류에 대해알아보겠습니다.
데이터의 형식으로는 기본 데이터 형식 과, 기본데이터 형식을 복합적으로 사용하여 이루어진 복합 데이터 형식이 있습니다.
이번에는 기본데이터 형식에 대해 알아보겠습니다.
변수는 데이터를 담을수있는 일정 크기의 공간이라 할수있습니다.
이런 변수에 최초의 데이터를 할당하는 것을 초기화라 부릅니다. c언어나 c++은 변수 선언뒤 아무데이터도 입력하지 않으면 "쓰레기 데이터"가 들어가서 이변수를 그대로 사용하면 문제가 발생했지만, c#은 이런문제를 방지하도록 오류 메세지를 발생시킵니다.
c#에서 지원해주는 기본 변수형은 모두 15가지가 있는데, 이 변수 타입들은 크게 숫자형식, 논리형식,문자열형식,오브젝트 형식으로 나뉩니다.
우선 정수형태의 자료형을 살펴봅시다.
데이터 형식 |
설명 |
크기 |
값의 범위 |
byte |
부호 없는 정수 |
1(8비트) |
0~255 |
sbyte |
signed byte 정수 |
1(8비트) |
-128~127 |
short |
정수 |
2(16비트) |
-32,768~32,767 |
ushort |
unsigned short 부호없는 정수 |
2(16비트) |
0~65,535 |
int |
정수 |
4(32비트) |
-2,147,483,648 ~ 2,147,483,647 |
uint |
unsigned int 부호없는 정수 |
4(32비트) |
0~4,294,967,295 |
long |
정수 |
8(64비트) |
-922,337,203,685,477,508 ~ 922,337,203,685,477,507 |
ulong |
unsigned long 부호없는 정수 |
8(64비트) |
0~18,446,744,073,709,551,615 |
char |
유니코드 문자 |
2(16비트) |
|
여기서 잠깐! 그냥 long이 가장크기에 byte와 int형 모두 담을수 있으니 전부다 long으로 선언해서 사용하면 된다고 생각하신다면 큰 오류를 범하고 계십니다!
만약 모든 정수형 데이터를 long으로 사용하게 된다면 컴퓨터나 스마트폰의 메모리를 많이 차지하게 되어, 소프트웨어가 렉을 유발하는 현상을 만들수 있습니다. 컴퓨터의 자원은 유한하다는점 숙지하시고, 1bit라도 줄이기 위해 노력하여 코딩하는게 원칙입니다.
부동 소수점 데이터 형식
부동소수점이란? - 말그대로 소수점을 이동시키는 자료형입니다. 소수점을 이동시켜서 데이터를 담으면 더 넓은 폭의 값을 집어넣을수 있기때문에 사용합니다.
데이터 형식 |
설명 |
크기(바이트) |
범위 |
float |
단일 정밀도 부동 소수점 형식 7개의 자리수만 다룸 |
4(32비트) |
-3.402823e38 ~ 3.402823e38 |
double |
복수 정밀도 부동 소수점 형식 15~16개의 자리수를 다룸 |
8(64비트) |
-1.79769313486232e308~ 1.79769313486232e308 |
c#의 float와 double은 IEEE754라는 표준 알고리즘에 기반한 데이터 형식입니다. 4(32비트)바이트로 이루어진 float형은 1비트의 부호부, 8비트의 지수부, 23비트의 가수부로 이루어져있습니다.
하지만, float 형식이 가지는 유효숫자는 7자리 밖에 되지 않아서 7자리 이상의 수는 "대략적으로" 표현하는것입니다. 이를 "한정된 정밀도(precision)" 이라고 하고, float를 기준으로 삼아 단일정밀도라 하고, 두배의 메모리를 쓰는 double을 복수정밀도라 합니다.
Decimal형식
Decimal형식도 실수를 다루는 데이터이지만, 이전의 부동 소수점과는 다른 방식으로 소수를 다루고, 정밀도도 훨씬 높습니다.
데이터 형식 |
설명 |
크기(바이트) |
범위 |
decimal |
29자리 데이터를 표현할수 있는 소수 형식 |
16(128비트) |
(+,-)1.0x10e-28~(+,-)7.9x10e28 |
3가지 소수점 형식의 정밀도 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
using System;
namespace Decimal
{
class Test
{
static void Main(String[] args)
{
float a = 3.141592653589793238462643383279f; //f를 붙이면 float
double b = 3.141592653589793238462643383279; //아무것도 붙이지 않으면 double
decimal c = 3.141592653589793238462643383279m; //m을 붙이면 decimal
Console.WriteLine("a:"+a);
Console.WriteLine("b:"+b);
Console.WriteLine("c:"+c);
}
}
} |
cs |
Output :
a: 3.141593
b: 3.14159265358979
c: 3.1415926535897932384626433833
위의 결과값을 보시면 아시듯이 decimal형식의 정밀도가 훨씬 뛰어나다는걸 알수있습니다.
문자,문자열 형식
문자형과 문자열 형식은 각각 한가지의 자료형밖에 없는데요, 문자형식은 char, 문자열 형식은 String입니다. char 형은 문자코드값을 이용하여 정수형 데이터도 담고, 문자형 데이터도 담을수 있습니다. 크기는 위의 표와같이 2(16비트)byte며, 한개의 변수에 한개의 문자만 담을수 있습니다. String형은 정해진 크기가 없고, 담는 문자열의 길이에 따라 그 크기가 달라집니다.
마지막으로!
논리형식에 대해서 알아보겠습니다.
데이터 형식 |
설명 |
크기(바이트) |
범위 |
bool |
논리 형식 |
1(8비트) |
true,false |
bool형식의 변수는 참과 거짓 말그대로 논리형의 변수를 담을수 있습니다. c언어 에서는 true와 false대신 0과 1을 사용하여 굉장히 불편했지만, c#에서는 논리형식을 지원하여 더욱 편한 프로그래밍이 가능해졌습니다.
이상 박스여우의 c#마스터 - #3 기본 데이터 형식 에 대한 포스팅
'tmp' 카테고리의 다른 글
c#마스터 - #5형변환 (435) | 2015.09.14 |
---|---|
c#마스터 - #4Object 형식과 박싱,언박싱 (452) | 2015.09.14 |
C# 강좌 - 두번째 : 기초소스 뜯어보기 (417) | 2015.09.14 |
C# 강좌 - 첫번째 : 컴파일러 설치 (422) | 2015.09.14 |
c언어 - 변수 (410) | 2015.08.17 |