데이터의 종류에는
1. 정수
2. 실수
3. 문자
4. 문자열
5. 논리
컴퓨터의 최소 저장 단위는 1byte 이다.
1byte 로 정수를 표현한다면?
1은 어떻게 표현이 될까?
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
255는 어떻게 표현이 될까?
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2^0
0~255 = 0~ 2^8 -1 (양의 정수)
-128~0~127= -2^7~ 2^7 -1
-1은 어떻게 표현이 될까?
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
-2
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 + (- 1) = 0
음수는 컴퓨터에서 2의 보수로 만든다.
1의 보수 : 부호 반전
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
2의 보수 : 1의 보수 +1
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2byte 로 정수를 표현한다면?
양의 정수 : 0~2^16-1(65535)
정수: 2^15~0~2^15-1
<정수형>
Data Types | 바이트 | 범위 |
char | 1 | -2^7~2^7-1 |
unsigned char | 1 | 0~2^8-1 |
short | 2 | -2^15~2^15-1 |
unsigned short | 2 | 0~2^16-1(65535) |
int | 4 | -2^31~2^31-1 |
unsigned int | 4 | 0~2^32-1(4294967295) |
참조: __int64 (크기:8 바이트, -2^63~2^63-1)
unsigned __int64 (크기:8 바이트, 0~2^64-1) // 18446744073709551615
실수는 어떻게 표현될까?
±m×ne
±: 부호(sign) m: 가수(significant) n: 기수(base) e:지수(exponent)
Data Types | 부호 | 지수 | 가수 |
float(32) | 1bit | 8bits | 23bits |
double(64) | 1bit | 11bits | 52bits |
오해하기 부분 (기수를 10으로 생각한다.)
기수(base)는 컴퓨터 내부에서 2진수를 사용하므로 기수는 2가 된다.
예를 들면 (쉽게 기수를 10으로 생각해서 표현하면)
실수 123.456을 부동 소수점 형식으로 표현하면 1.23456*102
<실수형>
Data Types | 바이트 | 범위 |
float | 4 | 3.4*10-38~3.4*1038 |
double | 8 | 1.7*10-308~1.7*10308 |
<질문>
그럼 정수와 실수는 어떤 값이 정확한가?
<문자형 및 문자열>
char a = 'x';
char name[10] = "I am Nuno"; // n 은 문자 갯수
영어는 한글자당 1byte 소모
한글은 한글자당 2bytes 소모
예1> 영어 12자를 저장하기 위해서는 12+1 = 13
예2> 한글 10자를 저장하기 위해서는 20+1 = 21
<질문>
왜 + 1을 해서 한문자를 더 추가해야 할까?
NULL / 0
<논리형>
bool 은 true / false 두 값을 취한다.
false 는 0을 의미한다.
<질문>
true 는 무엇을 의미할까?
자료형의 크기를 알기 위해서 sizeof() 를 사용한다.
예> int num = sizeof(bool);