데이터가 메모리에 저장되는 형태와 저장되는 방식을 명시하는 역할
0/1로 구성된 컴퓨터에게 여러 형태의 자료를 저장하기 위함
종류
<논리형>
bool 1byte : true ,false // 0이아닌 모든값과 , 0
<정수형>
byte 1byte : 0~255
int 4byte : -2^31 ~ 2^31 -1
uint 4byte : 0~ 2^32 -1
long 8byte : -2^63~2^63-1
ulong 8byte : 0~2^64-1
float 4byte : -1.5e-45 ~ +-3.4e38
double 8byte : -5.0e-324 ~ +-1.7e308
<문자열> 아스키코드/유니코드 문자를 표현할 방법이 없으므로 문자 별 숫자를 지정해 둠
char 16비트 유니코드 : ‘a’, ‘b’, ‘한’, ... :
string 유니코드 문자열 : “abcd”, “감자”, … 저장하기 위한 데이터의 크기가 정해져 있지 않음 내부 구현은 char배열 -> 배열의 경우 한번 만들면 크기의 변경이 어렵다. ->특수처리
string의 불변성
보수 체계 : 맨 앞의 숫자가 0이면 + // 1이면 – ex) 1011 -> -3 ex) 0011 -> 3
2의보수 : 음수를 쉽게 더하기 위해 만듦 // 1의 보수 +1 ex) 0011 ->3 ex) 1101 -> -3
보수 체계를 만들기 위해 뒤집고 +1 하는 연산은 컴퓨터에선 매우 빠른 작업이 가능
이 경우 3+ (-3)을 했을 때 10000 -> 자릿수를 넘는 앞의 1 은 버려지고 0이 됨 => 덧셈이 쉽다.
컴퓨터의 경우는 2의 보수 체계 사용! 장점 = 음수/양수 상관없이 덧셈으로 계산이 가능
<overflow & underflow> 표현할 수 있는 최대 숫자에서 벗어날 경우 반대 부호의 최댓값이 나옴
오버플로우 = int.Max +1 = -21억
언더플로우 = int.Min -1 = 21억
<소수점 표현 방식 차이> 점의 위치가 고정인가
고정 소수점 : 8자리 정수 // 뒤의 23자리 소수 100.28 -> 직관적이긴 하지만 표현 범위가 좁다
부동 소수점 : 8비트 지수부 // 23비트 가수부 1.0028*10^2 -> 표현 범위가 넓어짐
배열
동일한 자료형의 요소들로 구성된 데이터 집합
인덱스를 통하여 개개의 배열요소에 접근할 수 있다.
배열의 처음 요소의 인덱스는 0부터 시작
배열의 경우 메모리에 연속적으로 저장되기 때문에 인덱스로 빠르게 찾기가 가능