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
사용하는 것 비추천
댓글남기기