정수 자료형
자료형 | 설명 | 범위 | 크기 |
byte | 부호 없는 정수 | 0~255 | 8bit |
sbyte | 정수 | -128~127 | 8bit |
short | 정수 | -32,768~32,767 | 16bit |
ushort | 부호 없는 정수 | 0~65,535 | 16bit |
int | 정수 | -2,147,483,648~2,147,483,647 | 32bit |
uint | 부호 없는 정수 | 0~4,294,967,295 | 32bit |
long | 정수 | -922,337,203,685,477,508~922,337,203,685,477,507 | 64bit |
ulong | 부호 없는 정수 | 0~18,446,744,073,709,551,615 | 64bit |
char* | 유니코드 문자 | 16bit |
*char 형식은 단일 문자를 정수 형태로 표현함
부동 소수점 형식
자료형 | 설명 | 범위 | 크기 |
float | 단일 정밀도 | -3.402823e38~3.402823e38 | 32bit |
double | 복수 정밀도 | -1.79769313486232e308~1.79769313486232e308 | 64bit |
실수 형식
자료형 | 설명 | 범위 | 크기 |
decimal | 29자리 소수 | ±1.0×10e-28~±7.9×10e28 | 128bit |
문자 형식
자료형 | 설명 | ||
char | 단일 문자 | 'a' 와 같이 작은 따옴표로 문자를 묶어서 표현 | |
string | 문자열 | "abc" 와 같이 큰 따옴표로 문자열을 묶어서 표현 |
논리 형식
자료형 | 설명 | 범위 | 크기 |
bool | 논리 형식 | true, false | 8bit |
추가
BigInteger
long 형식은 이미 큰 정수를 표현할 수 있지만 최대값에 가까운 값들끼리 연산을 하다보면 오버플로우로 인한 예외가 발생하기도 한다. 이럴 때에는 더 큰 값을 처리할 수 있는 형식이 필요하다. 새로운 데이터 형식을 작성해서 사용할 수도 있지만 C#에서는 BigInteger 클래스를 지원하고 있다.
using System;
using System.Numerics;
class program
{
static BigInteger a = new BigInteger();
static long b = long.MaxValue;
static void Main()
{
// a = 10000000000000000000000; 컴파일 에러
a = BigInteger.Parse("10000000000000000000000");
Console.WriteLine(a);
Console.WriteLine(b);
}
}
// 결과
// 10000000000000000000000
// 9223372036854775807
BigInteger 형식을 사용할 때에는 System.Numerics 참조를 꼭 더해주어야한다. 그리고 왜인지 큰 정수를 직접 저장하려고 하면 컴파일 에러가 발생하고 "문자열"상태의 큰 정수를 BigInteger.Parse( ) 메소드를 사용해서 변환해주어야한다. 이 형식은 정수 범위 안에서 표현 범위의 제한이 없기 때문에 매우 큰 정수끼리의 연산이 가능하다.
StringBuilder
String 형식은 한 번 저장한 데이터를 수정할 수 없다. 따라서 데이터를 새로 지정 때마다 새로운 메모리 공간을 사용한다. 하나의 string에 데이터를 여러번 덮어 씌우게 되면 메모리 사용량이 굉장히 커지고 처리 시간도 급격히 길어진다. StringBuilder 클래스는 문자열을 새로 저장할 때 내부 버퍼 값을 변경하기 때문에 새로운 공간을 할당하지 않아도 된다. 수정 가능한 문자열이기 때문에 문자열을 여러번 변경하는 프로그램을 작성할 때에는 이 클래스를 이용하는 것이 메모리 관리에 유리하다.
using System;
using System.Text;
class program
{
static StringBuilder sb = new StringBuilder(); // 인스턴스 생성
static float a = 1.2345f;
static void Main()
{
sb.AppendLine(a.ToString());
// float 형식을 암시적으로 변환할 수 없기 때문에 ToString() 메소드를 사용한다.
Console.Write("float data a = " + sb);
// string 형식처럼 자유롭게 입출력이 가능하다.
}
}
// 결과
// float data a = 1.2345
String은 단일 문자의 배열과 같기 때문에 index를 활용한 단일 문자 표현도 가능하지만 StringBuilder에서는 이게 불가능하다. StringBuilder에서 이 기능을 사용하려면 ToString( )메소드를 사용해 String 형식으로 바꿔주어야한다. 메모리 면에서 String보다 효율이 높지만 너무 큰 데이터를 저장하면 메모리 초과 예외가 발생한다.