-목차-
1. 자료의 해석과 자료형
2. 자료형과 메모리의 크기
1. 자료의 해석과 자료형
- 컴퓨터는 모든 형태의 정보를 이진값으로 바꿔 처리하고 저장한다.
● 자료형이란?
- 어떤 종류의 정보이고 그것이 어떤 체계를 통해 부호화되었는지 알려주는 역할 ★★★
- 이진 자료의 해석에 필요한 정보
- 데이터에 대한 데이터 (Meta-Data)
- 자료형이 없으면 변수를 선언할 때 정보를 어떤 식으로 저장할지 또 저장된 정보를 어떻게 해석할지 알 수 없음
● 부호화/역부호화란?
- 특정 정보를 이진 값으로 바꾸는 과정을 부화화(Encoding)이라 하고, 부호화의 역과정을 역부호화라고 한다.
● C언어의 자료형
2. 자료형과 메모리 크기
- 자료형은 자료 저장을 위해 필요한 메모리 크기가 정해져 있다.
+) C언어 소스코드에서 'sizeof() 연산자'를 통해 자료형/변수의 메모리 크기를 얻을 수 있다.
#include <stdio.h>
int main(void)
{
int n;
char ch;
printf("int 크기 %d\n",sizeof(int));
printf("n 크기 %d\n",sizeof(n));
printf("char 크기 %d\n",sizeof(char));
printf("ch 크기 %d\n",sizeof(ch));
return 0;
}
>>>
int 크기 4
n 크기 4
char 크기 1
ch 크기 1
● 정수형
1. 5개의 정수형 : char, short, int, long, long long
- char는 문자를 위한 자료형이지만 정수형으로 간주하여도 무방
types | 크기 | 최소값 | 최대값 |
char | 8 bits | -2**7 = -128 | 2**7 - 1 = 127 |
short | 16 bits | -2**15 = 32,768 | 2**15 - 1 = 32,767 |
int | 32 bits | -2**31 | 2**31 - 1 |
long | 32 bits | -2**31 | 2**31 - 1 |
long long | 64 bits | -2**63 | 2**63 - 1 |
2. unsigned 정수형
- 0과 양의 정수만을 나타내는 정수형, 음수를 표현할 수 없는 대신에 나타낼 수 있는 양의 정수가 두 배
types | 크기 | 최소값 | 최대값 |
unsigned char | 8 bits | 0 | 2**8 - 1 |
unsigned short | 16 bits | 0 | 2**16 -1 |
unsigned int | 32 bits | 0 | 2**32 - 1 |
unsigned long | 32 bits | 0 | 2**32 - 1 |
unsigned long long | 64 bits | 0 | 2**64 - 1 |
● Numeral Systems
※ 10진법 : 0 ~ 9
- 241 = 2*10**2 + 4*10**1 + 1*10**0
※ 2진법 : 0,1
- 11101(2) = 1*2**4 + 1*2**4 + 1*2**3 + 1*2**2 + 0*2**1 + 1*2**0
※ 8진법 : 0 ~ 7
- 361(8) = 3*8**2 + 6*8**1 + 1*8**0
※ 16진법 : 0 ~ F
- 10 -> A, 11 -> B, 12 -> C, 13 -> D, 14 -> E, 15 -> F
- 0xF1 = 15*16**1 + 1*16**0
● 소수 표현
※ 2진법
- 0.1101(2) = 1*2**(-1) + 1*2**(-2) + 0*2**(-3) + 1*2**(-4)
● 10진수 -> 2진수 (정수)
위와 같이 특정 수를 몫과 나머지로 나타낸다. (몫이 0이 될 때까지 나눠준다.)
나머지를 밑에서부터 위로 읽어준다.
10110011(2) 이렇게.!!
● 10진수 -> 2진수 (소수)
위와 같이 소수에 계속 2를 곱해준다. (단, 정수부분은 고려 X)
2를 곱해서 1.0이 나오는 순간 멈추고 위에서부터 아래로 정수부분을 읽어준다.
● 표현 가능한 수의 개수
※ k bits로 몇 가지의 수를 표현할 수 있는가?
- 2**k 가지의 수를 표현할 수 있다.
※ [0,1023] 사이의 정수를 표현하려면 최소 몇 bits가 필요한가?
- 10 bits가 필요하다.
※ [-1024,1023] 사이의 정수를 표현하려면 최소 몇 bits가 필요한가?
- 11 bits가 필요하다.
※ 0.1 을 2진 소수로 표현하려면 몇 bits가 필요한가?
- 무한 개의 bits가 필요핟다.
- 그렇기에 유한한 이산/디지털 시스템은 연속적인 수를 표현하는데 한계가 있다.
● Signed Integers 이진 표현
※ 양의 정수 표현법
- 부호 없는 정수와 같이 해석
- 맨 앞의 비트를 0으로 표기
- ex) 00101 = 5 (5 bits의 경우)
※ 음의 정수 표현법
- 맨 앞의 비트를 1로 표기
- Signed Magitude (부호-절대값) ex) 10101 = -5
- One's Complement (1의 보수) ex) 11010 = -5
+) One's Complement와 같이 표현하는 방법은 절대 값이 같은 양수 값으로 표현하고 각 비트 값을 0은 1로, 1은 0으로 바꿔준다.
- Two's Complement (2의 보수) ex) 11011 = - 5
+) Two's Complement와 같이 표현하는 방법은 1의 보수 방법에 1을 더해준다.
● Two's Complement (2의 보수) ★★★
- '부호-절대값'과 '1의 보수' 표현법의 문제점은 0의 2가지 표현법이 +0 과 -0이 존재한다는 것이고, 산술 연산 회로가 복잡하다는 것이다. 따라서 정수들의 산술 연산에 적합한 방법은 2의 보수 표현법이다.
ex)
- 부호-절대값 방식에서 2 + (-3) -> 00010 + 10011 != 10101
- 1의 보수 방식에서 4 + (-3) -> 00100 + 11100 != 00000
- 2의 보수 방식에서 5 + (-5) -> 00101 + 11011 = 00000
● Overflow and Underflow
- 정수형에서 저장(표현)할 수 있는 수보다 더 큰 수 또는 더 작은 수를 저장하려 할 때 발생
- 논리 오류의 일종
'CS > C, C++' 카테고리의 다른 글
[C/C++] 05-4 다양한 자료형과 자료 표현 - 연산자 (0) | 2021.10.03 |
---|---|
[C/C++] 05-3 다양한 자료형과 자료 표현 - 문자열 (0) | 2021.10.02 |
[C/C++] 05-2 다양한 자료형과 자료 표현 - 실수형 및 문자 (0) | 2021.09.30 |
[C/C++] 04 - 2 함수 선언과 변수 유효 범위 (0) | 2021.09.25 |
[C/C++] 04-1 함수 개념과 호출 구조, 재귀 호출 (0) | 2021.09.25 |