본문으로 바로가기

[C언어] 자료형

category C 2014. 5. 2. 14:53

데이터의 종류에는

1. 정수

2. 실수

3. 문자

4. 문자열

5. 논리

 

컴퓨터의 최소 저장 단위는 1byte 이다.

 

1byte 로 정수를 표현한다면?

1은 어떻게 표현이 될까?

 0

255는 어떻게 표현이 될까?

 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

 1

1

 -2

0

1

1

 1

 1

 0

1 + (- 1) = 0

음수는 컴퓨터에서 2의 보수로 만든다.

1의 보수 : 부호 반전

1

 1

 1

 1

0

2의 보수 : 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);