C# - 데이터 기본

정수 형식 (및 범위)

byte : 1byte(0~255)
short : 2byte(-3만~3만)
int : 4byte(-21억~21억)
long : 8byte

sbyte : 1byte(-128~127)
ushort : 2byte(0~6만)
uint : 4byte(0~43억)
ulong : 8byte

  • 게임 개발할 때
    변수 형식의 크기가 커질수록 담을 수 있는 데이터의 크기도 크지만,
    그만큼 공간을 많이 차지한다. 대부분 int를 많이 사용한다.
    ID(고유 식별 번호) 를 사용해야 하는 경우라면 long을 사용하는 것이 유리하다.
    아이템 고유 식별 번호. 서버에 총 생성된 아이템 개수가 21억을 넘어가는 경우.

진수 (base)

2진수

각 자리 0~1로 표현

2진수 리터럴

0b00 0b01 0b10 0b11 0b100 ….

16진수

각 자리 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 로 표현
A -> 10
B -> 11
C -> 12

F -> 15

16진수 리터럴

0x00 0x01 … 0x0F
ex)
0x100 => 256
0xFF => 255

2진수에서 16진수로의 변환

ex)

16진수에서 2진수로의 변환

ex)

정수 외 기본 데이터 타입

불리언

bool : 1byte
1비트면 되지만 내부적으로 연산할 때는
1byte로 하는 것이 유리하기 때문에
1byte로 정의되어있다.

소수

double : 4byte
float : 8byte
소수를 메모리에 저장하는 방법도 복잡하고, 소수 연산도 내부적으로 매우 복잡하게 구현되어있다.

참고 자료!(출처:홍재룡수학전문학원블로그)

문자

char : 2byte

문자열

string

형식 변환

공간의 크기가 다른 경우

공간이 작은 것에서 큰 것으로 형식 변활할 때는 문제가 없지만
공간이 큰 것에서 작은 것으로 형식을 변환할 때는 문제가 생길 수 있음.

int a = 1000;
short b = a;

컴파일 에러. 암시적으로 변환 불가. 명시적 변환 필요.

int a = 1000;
short b = (short)a;

캐스팅: 의도적으로 데이터 형 변환.(데이터 손실 위험에도 불구하고)
상위 비트에 있는 데이터가 손실될 수 있다.
int 범위 = 4바이트 -21억 ~ 21억
short 범위 = 2바이트 -3만 ~ 3만

데이터 손실 예시

int a = 0x0FFFFFFF; // a 는 아무튼 엄청 큰 양수. 16^8 - 1
/*
0x0FFFFFFF = 0b0000 1111 1111 1111 1111 1111 1111 1111
0 4개 1이 28개. 32비트. 4바이트 꽉 채움.
*/

short b = (short) a;
/*
최상위 비트  2바이트가 날아감.
따라서 b 담기는 값은 0xFFFF = 0b1111 1111 1111 1111 = -1
/*

공간의 크기는 같은데, 부호가 다른 데이터 형식으로 변환할 경우

byte c = 255;
sbyte sb = (sbyte) c;
/*
0xFF = 0b1111 1111 = -1
*/

데이터 연산

연산자

분류 연산자
수식 연산자 +, -, *, /, % a = b + c
증감 연산자 ++, – a++
할당 연산자 =, +=, -=, *=, /=, %= a += b + c
논리 연산자 &&, ||, ! a && b
관계 연산자 <, >, ==, !=, >=, <= a > b
비트 연산자 &, |, ^ a ^ b
시프트 연산자 », « a » 2

출처 : [디버깅하는 남자]

연산 우선순위

작성할 때 헷갈리면 괄호로 강제로 우선순위 매기기

var

사용하는 것 비추천

태그:

업데이트:

댓글남기기