- 0과 1만을 이해하는 컴퓨터가 어떻게 문자 & 숫자를 인식하는지
- 그렇게 표현된 정적 데이터가 명령어에 의해 어떻게 실행되는지
-
CPU는 기본적으로 0과 1만 이해
-
비트 : 0과 1을 나타내는 가장 작은 정보의 단위
-
바이트 : 여덟 비트를 묶은 단위
- 하나의 바이트로 표현 가능한 정보 : 2^8 = 256개
-
워드 : CPU 관점에서의 정보 단위
<aside>
🥕
비트, 바이트 등의 단위는 모두 프로그램 크기를 나타낼 때 사용하는 정보 단위
(= 프로그램 관점에서 본 정보 단위)
</aside>
즉, CPU가 한 번에 처리할 수 있는 데이터 크기 의미
- CPU는 2GB 크기의 프로그램을 한 번에 2GB만큼 읽어 들여 처리하는 게 아니라, 프로그램을 워드 단위로 읽어 들이고 처리
데이터 - 0과 1로 숫자 표현하기
정수 표현
- CPU는 0과 1만 이해할 수 있으므로 2진법을 사용해 수를 이해
소수 표현
⭐️ 핵심 : 표현하고자 하는 소수와 실제로 저장된 소수 간에 오차가 존재할 수 있다는 점
-
부동 소수점 표현 방식을 이용해 컴퓨터 내부에서 소수점을 나타내는데, 정밀도에 한계가 존재하기 때문
- 부동 소수점 : 소수점이 고정되어 있지 않은 수. 필요에 따라 소수점의 위치가 이동할 수 있고 유동적
-
IEEE 754 : 오늘날 대부분의 컴퓨터가 2진수로 부동 소수점(실수)을 표현하는 방식

https://velog.io/@syleemk/CS-부동-소수점-오차
3가지 구성 요소
-
부호 비트 : 숫자 부호 결정
-
지수부 : 소수점의 위치를 나타내는 부분
- 지수부에 저장되는 값은 바이어스(bias)라는 특정 값을 더한 형태
(실제 지수 값은 저장된 지수 값에서 바이어스를 뺀 값)
$$
Bias = 2^(k-1)-1
$$
- k = 지수의 비트 수
- 32비트의 경우 → 지수부에 8비트 할당
- 64비트의 경우 → 지수부에 11비트 할당
-
가수부 : 유효 숫자를 나타내는 부분
- 정규화된 이진수 형태(
1.xxxxx
)에서 소수점 이하의 부분만 저장
🚨 유의할 점 : 10진수 소수를 2진수로 표현할 때, 10진수 소수와 2진수 소수의 표현이 딱 맞아떨어지지 않을 수 있음
- 10진수 0.1은 2진수로 표현하려면 (1.m x 2^n) 형태로 무한하게 많은 소수점이 필요
- 즉, (m x 10^n)으로 표현 가능한 수 중에도 (m x 2^n)으로 딱 맞아떨어지지 않는 수가 존재 가능
- 컴퓨터 저장공간은 한정적 → 딱 맞아떨어지지 않는 경우, 일부 소수점을 생략해 저장 → 오차 발생
데이터 - 0과 1로 문자 표현하기
-
문자 집합 : 컴퓨터가 이해할 수 있는 문자들의 집합
<aside>
🥕
컴퓨터가 처리할 수 있도록 문자에 이진수 값을 할당한 약속 or 규칙( = 사전)
컴퓨터는 특정 문자 집합(EX: 유니코드)의 규칙을 알고 있음. 특정 문자를 인코딩 or 디코딩할 때, 컴퓨터는 해당 문자를 문자 집합에서 찾아 그 번호를 확인 → 변환
</aside>
- 문자 인코딩 : 문자 집합에 속한 문자를 컴퓨터가 이해하는 0과 1로 이뤄진 문자 코드로 변환하는 과정
- 문자 디코딩 : 0과 1로 표현된 문자를 사람이 이해하는 문자로 변환하는 과정
-
유니코드가 전 세계의 모든 문자를 하나의 거대한 문자 집합으로 통합
- 모든 문자에 고정 크기를 할당하면, 자주 사용되는 영어 문자도 불필요하게 많은 공간을 차지 → 이를 해결하기 위해 문자 인코딩 등장
- 영어 문자는 1바이트, 한글은 3바이트, 이모지는 4바이트를 사용하는 가변 길이 인코딩 방식을 채택 → 저장 공간 절약 & 호환성 증가
명령어