* Data의 형태를 저장
* 데이터가 메모리에 저장되는 형태와 처리되는 방식을 명시하는 역할
* 0과 1만으로 구성된 컴퓨터에게 여러 형태의 자료를 저장하기 위함
// 자료형 종류
<논리형>
bool (논리형 자료) : true, false
- 이론 : false는 0 true은 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
-------------------------------------------------------------
- 이론 : 1byte == 8bit == 0000 1111(2진수) 정수형을 0, 1로 표현이 가능하지만 - 는 어떻게 표현하는가?
바로 '보수체계'를 사용한다. 보수체계란 가장 앞의 숫자가 0일시 +, 1일시 -로 표현하는 방식이며 0,1 로만 표현하는 방식을 1의 보수체계 라고 한다 최근엔 2의 보수체계(+숫자 뒤집고 +1)를 사용하기도 한다. 예를들어 3(0011)과 -3(1011)일경우 -3 -> 1101로 표현하는 방식이 2의 보수체계라고 하고 이유는 3+ (-3)를 한 값 때문에 생겨났다. 장점으로 더하기만 진행하면 정확하게 값이 나오기 때문에 2의보수체계를 많이 채용한다.
*\ 컴퓨터는 +(더하기)를 연산할때 제일 효율적이고 빠르게 사용할수있다 이유는 컴퓨터는 덧셈을 기반으로 만들어진 덧셈전가산기이기 때문이다.
<오버플로우, 언더플로우>
- 오버플로우 : 예를들어 int자료형에서 2^31 - 1에서 1를 더하면 -1이 나오는 형상같은것을 말하며 최대수치에서 하나를 더할때 가장 최소의 숫자가 나오는 형상을 말한다
- 언더플로우 : 오버플로우의 반대로 최소숫자의 -1를 할때 표현할수있는 최대숫자가 나오는 형상이다.
-------------------------------------------------------------
<부동소수점형>
// float (4byte 부동소수) : +-1.5e-45 ~ +-3.4e38
// double (8byte 부동소수) : +-5.0e-324 ~ +-1.7e308
- 이론 : 고정소수점의 경우 앞 7자리 뒤 24자리 사이 .으로 위치가 정해저 있다 그에 반면 부동소수점의 경우 예를 들어 float의 경우 앞 8byte(지수부) 와 뒤 23byte(가수부)를 곱한 값으로 위치를 정한다.
고정소수점의 경우 표현이 빠르지만 표현의 범위가 작아지는 단점이 있다.
반면 부동소수점의 경우 고정보단 비교적 느리지만 표현의 범위가 넓으면서 세밀하고 간단하다 하지만 단점은 지수부의 초과치(대략 10억*10의 -n)을 초과하면 뒤에 어떤 가수부가 붙어도 표현이 불가능하다 그래서 부동소수점의 경우 소수점의 근사값을 표현하다 보니 소수점의 정확성이 떨어진다.
*/ if(float == float)로 조건을 표현하는건 조건충족하는것에 불가능에 가깝다 왜냐면 float는 소수점이 무한소수로 이어지는 현상이 있어서 오히려 float <= float 같은 근사값으로 조건을 충족시켜주는 방식을 많이 사용한다.
-------------------------------------------------------------
<문자형>
// char (16비트 유니코드) : 'a', 'b', '한' ... <-> 아스키코드
// string (유니코드 문자열) : "abcd", "감자", ...
- 이론 : 컴퓨터로 문자를 표현할때 0,1로 표현할 방법이 없었서 세계적으로 ASCI code(아스키코드)라는 99자리 문자를 이진법의 패턴과 열결해서 표현할수 있는 패턴을 정해서 쓰고있다 그리고 c#의 경우 유니코드라는 문자 패턴을 사용한다.
string 문자형의 경우 정해진 크기가 없다 이유는 문자열의 길이를 미리 지정할수없는 불분명함이 있기 때문에 정해진 크기가 없다.(string의 불변성)
*/ 아스키코드는 영어만 지원하고 유니코드는 다양한 언어를 지원한다. (.utf -> 유니코드 확장자임)
-------------------------------------------------------------
'개발관련공부자료' 카테고리의 다른 글
객체지향 프로그래밍 (0) | 2023.09.22 |
---|---|
메모리 구조 (0) | 2023.09.22 |
클래스 (Class) (0) | 2023.09.22 |
함수(Function) (0) | 2023.09.22 |
연산자 (0) | 2023.09.22 |