1. 이진수와 2의 보수법
컴퓨터는 0과 1만을 이해한다.
컴퓨터는 모든 수를 0,1로만 표현하는 이진법을 이해한다. 그렇다면 컴퓨터는 어떻게 0과 1로 표현할 수 있을까?
- 모든 양수 - 이진법
- 모든 음수 - 2의 보수
- 모든 소수 - 부동 소수점
- 모든 문자 - 문자집합 & 인코딩
1.1 이진법
이진법(바이너리)은 0,1로 모든 수를 표기하는 방법이다. 1을 넘어가는 시점에 자리올림을 한다고 생각하면 된다.
하지만 이진법은 숫자가 너무 길어진다는 단점이 존재한다. 따라서 16진수로 표현하기도 한다.
1.2 16진법
Ox10321
이런 식으로 표현한다.
1.3 2의 보수법
- 0과 1만으로 음수를 표현하는 방법 중 하나
- 어떤 수 n을 그보다 큰 2^n에서 뺸 값
- ex) 11의 2의 보수는 100에서 뺸 01
- 더 쉬운 방법
근데 해당 수가 보수인지 알 수 없다
컴퓨터는 어떻게 구분할 까?
cpu내부에 음수인지 판단하는 플래그 레지스터 저장장치가 있는데 이를 보고 판단한다.
- 플래그(flag) : CPU가 명령어를 실행하는 과정에서 참고할 정보의 모음
- 음수 플래그가 세팅 되어 있을 경우 : 음수
- 음수 플래그가 세팅 되어 있지 않을 경우: 양수
2. 부동소수점
소수점(floating point)로 숫자의 소수점이 어느 위치든 떠다닐 수 있다고 하는걸 말한다.
이 값은 어떻게 나올 수 있을까?
a = 0.1
b = 0.2
c = 0.3
if a + b == c:
print('Equal')
else
print('Not Equal')
결과는 Not Equal
이 출력된다. 이유가 무엇일까?
이 문제에 대해 이해하기 위해서는 지수(exponent)와 가수(significand)에 대해 알아야한다.
결론 부터 이야기 하자면 컴퓨터가 부동소수점으로 메모리에 저장하고 그 수를 십진법으로 표현하면서 값에 차이가 있을 수 있기 때문에 연산에 오차가 발생한다.
우선 메모리에 따라 저장할 수 있는 용량이 다를 수 있겠지만 부호, 지수, 가수로 나눠 저장된다.
- 십진수 소수를 이진수로 표현할 때 십진수 소수와 이진수 소수 표현이 딱 맞아 떨어지지 않을 수 있다.
- 1/10 이라는 분수
m x 10^n
꼴로 표현하면 맞아 떨어진다. - 1/10 이라는 분수
m x 2^n
꼴로 표현하면 무한히 많은 가수가 필요하다.
3. 문자 인코딩과 디코딩
3.1 0과 1로 문자 표현하기
- 문자 집합(character set) : 표현 가능한 문자들의 집합
- 문자 인코딩: 문자를 0과 1로 이루어진 문자 코드로 변환
- 문자 디코딩: 0과 1로 이루어진 문자 코드를 문자로 변환
3.1.1 문자가 깨진다면
오늘날 대부분 문자중 영어는 웬만하면 깨지지 않는다.
A컴퓨터와 B컴퓨터가 있다. A컴퓨터에서 인코딩 하는 방법과 B컴퓨터에서 인코딩하는 방법이 다르다면 문자 가 깨질 수 있다.
3.1.2 아스키코드
- 아스키 문자 집합: 초창기 문자 집합, 알파벳 + 아라비아 숫자 + 일부 특수 문자 + 제어 문자
기본적으로 `8bit`지만 실질적으로 `7bit`를 사용 `2^7`
- 대응이 곧 인코딩
- 컴퓨터가 읽는 방식에 따라 대응되는 문자나 숫자를 인코딩하기 때문이다.
- 표현할 수 있는 문자의 개수가 적고 다국어를 지원하지 않는다.
3.1.3 유니코드 문자 집합
- 대부분의 언어
- 특수문자
- 이모티콘
- 화살표 등등…
UTF-8
, UTF-16
등이 있다.
유니코드는 어떻게 인코딩해 표현할까?
유니코드는 코드 포인트를 인코딩하는 방식에 따라 달라진다. 즉, 유니코드 문자 집합을 인코딩하는 다양한 방법들이 있다.
인코딩하는 형태에 따라 대표적으로 UTF-8
, UTF-16
, UTF-32
등으로 나누어 진다.
'컴퓨터' 카테고리의 다른 글
명령어 (0) | 2024.08.03 |
---|---|
컴퓨터 구조 거시적으로 보기 (0) | 2024.08.03 |