반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 2를 읽고 정리한 내용입니다.

 

02-1 0과 1로 숫자를 표현하는 방법

정보 단위
  • bit: 0과 1을 나타내는 가장 작은 정보 단위
  • byte: 8개의 bit를 묶은 단위 ($2^8=256$ 개의 정보를 표현)
  • 1 kilobyte: 1000bytes
  • 1 gigabyte: 1000 kilobytes

1kB는 1024byte라고 표현하는 것은 잘못된 관습. 1024개를 묶어 표현한 단위는 KiB(키비), MiB, GiB

워드(word) : CPU가 한번에 처리할 수 있는 데이터 크기

  • CPU마다 다르지만 워드 크기는 대부분 32비트 아니면 64비트
  • 인텔이 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU

 

이진법

수학에서 0과 1만으로 모든 숫자를 표현하는 방법

일상에서 우리는 십진수를 사용하지만 컴퓨터는 2진수를 이해할 수 있기 때문에 변환해서 알려줘야 함

2진수 표기법

ex) 10진수에서 8을 2진수로 표기

  • ${1000}_{(2)}$
  • 0b1000

이진수의 음수 표현

컴퓨터는 0과 1만 이해할 수 있기 때문에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 함

⇒ 2의 보수를 구해 이 값을 음수로 간주하는 방법 사용

2의 보수 구하는 방법

  • 모든 0과 1을 뒤집고 거기에 1을 더한 값
  • 예)
    • $11_{(2)}$의 보수는 $01_{(2)}$
    • $11_{(2)}$ → $00_{(2)}$ → $01_{(2)}$

실제로 2진수 자체만 봐서는 음수인지 양수인지 구별하기 어려워서 컴퓨터 내부에서는 플래그(Flag)라는 부가정보를 사용

 

16진법

2진수만으로 숫자를 표현하기에 숫자의 길이가 너무 길어진다는 단점이 있음.

⇒ 16진법 사용

 

표기법 (10진수 15을 16진수로 표기)

  • ${15}_{(16)}$
  • 0x15

굳이 16진수를 사용하는 이유는 2진수와 16진수 간의 변환이 쉽기 때문

16진수 → 2진수

$1A2B_{(16)}$

⇒ 0001 1010 0010 1011

2진수 → 16진수

$11010101_{(2)}$

⇒ $D5_{(16)}$

02-2. 0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

문자집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음

문자 인코딩 : 문자 집합에 속한 문자를 0과 1로 변환하는 과정

문자 디코딩 : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

아스키코드

  • ASCII: American Standard Code for Information Interchange
  • 문자집합 중 하나로 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함
  • 문자들은 각각 7비트로 표현되는데 $2^7=128$ 개의 문자 표현 가능
    • 실제로는 8비트로 표현되지만 1비트는 parity bit 라고 불리는 오류 검출을 위해 사용됨

아스키 코드 표

아스키 코드표를 이용해 표현하고자 하는 문자를 0과 1로 표현할 수 있음

하지만 128개의 문자밖에 표현하지 못하고 특히 한글을 포함한 영어권 외의 나라들은 자신들의 언어를 0과 1로 표현할 수 없음

⇒ EUC-KR 인코딩 등장

 

EUC-KR

한글은 초성, 중성, 종성의 조합으로 이루어져 있어 2가지 인코딩 방식 존재

  1. 한글 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
  2. 한글 조합형 인코딩: 초성, 중성, 종성 각각을 위한 비트열을 할당하여 조합으로 하나의 글자 코드를 완성하는 인코딩 방식

 

EUC-KR은 완성형 인코딩 방식으로 2바이트 크기의 코드를 부여
EX) ‘가’ 는 b0a0으로 표현되는데 2진수로 변환해보면 1011 0000 1010 0000 으로 16bits → 2바이트

더보기

EUC-KR 코드표 (일부)

총 2350개 정도의 한글 단어를 표현할 수 있음

  • 아스키 코드보다 표현할 수 있는 문자가 많아졌지만 모든 한글 조합을 표현할 수 있을 정도로 많은 양은 아님
  • 쀍, 쀓 믜 같은 글자는 EUC-KR로 표현할 수 없음

⇒ EUC-KR의 확장된 버전으로 CP949 가 등장했고 8822자가 추가됨

 

유니코드와 UTF-8

유니코드 : EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수 문자, 이모티콘까지도 코드로 표현할 수 있는 통일된 문자집합

유니코드 문자집합

https://www.unicode.org/charts/PDF/UAC00.pdf

“한”과 “글”이라는 단어를 찾아보면,

  • 한: $D55C_{(16)}$
  • 글: $AE00_{(16)}$

아스키코드나 EUC-KR과 다르게 문자집합에서 찾은 고유한 값을 다시 인코딩

  • UTF-8, UTF-16, UTF-32등이 있음 (Unicode Transformation Format)
  • UTF-8 이 가장 대중적

UTF-8

  • 통상 1바이트에서 4바이트까지의 인코딩 결과를 만들어냄

  • 첫 코드 포인트와 마지막 코드 포인트 값의 범위를 통해 인코딩된 글자가 몇바이트로 구성되는지 알 수 있음
  • “한”과 “글”의 유니코드 값은 각각 D55C, AE00으로 0800~FFFF 사이에 속한다. 그러므로 각각 3바이트로 표현될 수 있음

 

  • D55C는 1101 0101 0101 1100 으로 이를 위에 X로 표시된 자리수에 순차적으로 넣어주면 된다
  • 한: 11101101 10010101 10011100

 

참고


1. 책 "혼자 공부하는 컴퓨터 구조+운영체제"
2. 유튜브 "혼자 공부하는 컴퓨터 구조 + 운영체제"

 
 
 
 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
CPU 성능 향상 기법  (0) 2024.07.02
명령어  (0) 2024.06.30
컴퓨터 구조  (0) 2024.06.25

+ Recent posts