[CS/컴퓨터구조] 2. 데이터

728x90

안녕하세요. 해당 포스트는 강민철 저자님의 '혼자 공부하는 컴퓨터 구조+운영체제'를 읽고 정리한 포스트입니다.

 

 

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

정보 단위

비트(bit)

  • 컴퓨터가 이해하는 가장 작은 정보 단위
  • 0 또는 1, 두 가지 정보로 표현할 수 있음(꺼짐/켜짐)
  • n비트는 2ⁿ가지의 정보를 표현할 수 있음. 예를 들어 3비트일 경우에는 8가지 정보를 표현할 수 있음
  • 바이트, ..., 테라바이트 등의 단위를 사용함(c.f. 이전 단위를 1,024개 묶어 표현한 단위는 kiB, MiB, GiB, TiB)
1바이트(byte) 8비트(bit)
1킬로바이트(1kB) 1,000바이트(1,000byte)
1메가바이트(1MB) 1,000킬로바이트(1,000kB)
1기가바이트(1GB) 1,000메가바이트(1,000MB)
1테라바이트(1TB) 1,000기가바이트(1,000GB)

 

 

워드(word)

  • CPU가 한 번에 처리할 수 있는 데이터의 크기. 예를 들어 16비트를 한 번에 처리할 수 있다면 1워드는 16비트가 됨!
    • 하프 워드(half word) : 워드의 절반 크기
    • 풀 워드(full word) : 1배 크기
    • 더블 워드(double word) : 2배 크기

 

 

 

이진법

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

🗒 ex. 십진수 8을 이진수로 표기하면

  • 1000(2)
  • 0b1000

 

이진수의 음수 표현

  • 2의 보수를 구해 음수로 간주하는 방법
    • 사전적 의미 : 어떤 수를 그보다 큰 2ⁿ에서 뺀 값 (ex. 11(2)보다 큰 100(2)에서 11(2)을 뺀 값인 01(2)이 됨)
    • 쉬운 설명(방법) : 모든 0과 1을 뒤집고 마지막에 1을 더해줌 (🗒 ex. 1011(2)에서 0100(2)으로 뒤집고 1을 더하여 0101(2)이 됨)

 

 

 

십육진법

출처 : https://reversecore.com/96

수가 15가 넘어가는 시점에서 자리 올림을 하는 숫자 표현 방식이며 이진수를 십육진수로 변환하기 쉽기 때문에 많이 쓰임

🗒 ex. 십육진수 15 표기

  • 수학적 표기 방식 : 15(16)
  • 코드상 표기 방식 : 0x15

 

십육진수를 이진수로 변환하기

 

 

이진수를 십육진수로 변환하기

 

 

 

 

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

문자 집합과 인코딩

문자 집합(character set)

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

 

문자 인코딩(character encoding)

문자를 0과 1로 변환하는 과정(코드화 하는 과정)

 

문자 디코딩(character decoding) ↔ 문자 인코딩

0과 1로 이루어진 문자를 사람이 이해할 수 있도록 변환하는 과정

 

 

 

아스키 코드

ASCII Code Table 출처 : https://discover.hubpages.com/technology/What-Are-ASCII-Codes

아스키(ASCII)

  • 초창기 문자 집합 중 하나. 영어 알파벳과 아라비아 숫자, 일부 특수문자를 포함함
  • 아스키 문자들은 각각 7비트가 표현됨. 2⁷개로 총 128개의 문자를 표현할 수 있음
  • 실제로는 8비트를 사용하나 1비트는 패리티 비트라고 불리는 오류 검출을 위해 사용되는 비트임
  • 매우 간단하고 인코딩이 된다는 장점이 있지만 128개의 문자만을 표현할 수 있어서 다른 언어는 표현할 수가 없음(8비트 확장 아스키(extended ASCII)의 등장, but 여전히 부족)

 

 

 

EUC-KR

  • 한글 인코딩 방식 2가지
    • 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
    • 조합형 인코딩 : 초성, 중성, 종성 각각을 위한 비트열을 할당하여 조합해서 글자 코드를 완성하는 방식
  • EUC-KR은 완성형 인코딩! 🗒 ex. '가'라는 글자의 경우 b0a1, '거'는 b0c5로 인코딩됨
  • 글자 하나 하나에 2바이트 크기의 코드 부여. 2바이트 == 16비트 == 4자리 십육진수로 표현

 

  • 2,350개 정도의 한글을 표현할 수 있지만 '쀍', '쀓', '믜'같은 글자를 표현할 수 없음

 

 

 

유니코드와 UTF-8

유니코드

  • EUC-KR보다 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
  • 인코딩 방식에는 UTF-8, UTF-16, UTF-32 등이 있음

 

UTF-8

  • 1바이트부터 4바이트까지의 인코딩 결과를 만들어냄. 인코딩 결과 값이 1~4바이트가 될 수 있음

 

  • UTF-8로 인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 결정됨

🗒 ex. 

'한'의 코드 포인트는 D55C(16), '글'은 AE00(16),

이것을 이진수로 표현하면 1101 0101 0101 1100(2), 1010 1110 0000 0000(2),

인코딩한 결과는 11101101 10010101 10011100(2), 11101010 10111000 10000000(2)

 

728x90