ComputerScience/컴퓨터 구조

[컴퓨터 구조] 0과 1로 표현하는 데이터

ruu++ 2024. 4. 21. 03:13
컴퓨터는 0과 1로 데이터를 표현합니다. 그러므로 사용하는 프로그래머 및 개발자는 이 세계에 익숙해지며,
숙지해야 할 필요가 있습니다. 데이터 단위부터 이진수와 16진수를 어떻게 다루는지 살펴보고자 합니다.

 

데이터 단위

  1. 1bit
    • 0과 1을 표현하는 방법을 1bit라고 말합니다
    • 1비트의 표현 가능 갯수 2, 2비트의 표현 가능 갯수 4, 3비트의 표현 가능 갯수 8
    • 2의 bit 제곱의 표현할 수 있는 정보를 가집니다.
    • 더 자세하게 알고 싶다면 해당 문서를 참고하세요.  컴퓨터의 동작원리 트랜지스터
  2. 1byte
    • bit가 8개로 묶으면 byte입니다.
    • 2의 8 제곱이므로 256가지를 표현할 수 있습니다.
  3. 1kilobtye
    • 바이트를 1000개를 묶은 단위를 kb라고 말합니다.
  4. magabyte
    • 키로바이트를 1000개로 묶은 단위입니다.
  5. terabyte
    • 키로 바이트를 1000개로 묶은 단위입니다.

컴퓨터는 숫자를 어떤 방식으로 다룰까요?

위에서 말하다 싶이 컴퓨터는 0과 1로 이뤄진 묶음으로 데이터를 다룹니다.

10 진수와 2진수

  • 컴퓨터에서 0과 1을 다루는 것은 주로 2진수를 사용합니다.
  • 사람은 보통 10진수를 사용하지만, 컴퓨터는 2진수를 사용하기 때문에 처음 접한다면 익숙하지 않습니다.
  • 그럼에도 개발자는 2진수의 체계 사용에 익숙해져야 합니다.
사람(10진수) 컴퓨터(2진수)
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000

컴퓨터는 음수를 어떻게 표현할까요?

컴퓨터는 2의 보수를 통해 음수와 양수를 표현합니다.

  • 2의 보수를 구하는 순서는 아래와 같습니다.
    1. 1의 보수를 구합니다.
    2. 1의 보수에 1을 더한 것이 2의 보수입니다.
  • 1의 보수는 모든 이진수를 뒤집습니다.
    ex) 1001 => 0110
  • 2의 보수는 구해진 1의 보수에 +1을 더합니다.
    ex) 0110 + 1 = 0111
2진수 1의보수 2의보수
1001 0110 0111
1101 0010 0011
0001 1000 1001
  • 부호비트(Most Significant Bit : MSB) 숫자체계에서 보통 2진수의 맨앞 비트를 양수를 판별하기 위한 부호로 사용합니다.
  • 실제 프로그래밍 언어들은 맨 앞의 비트는 음, 양수를 위해서 사용합니다. 참고자료: 프로그래밍 언어에서 2의 보수

0과 1로 문자를 표현하기.

사람이 언어를 컴퓨터가 읽을 수 있도록 문자 집합을 제공합니다.

  • 컴퓨터는 문자를 읽기 위해 여러 문자 집합 방식을 지원합니다.
  • 컴퓨터가 알도록 문자를 0과 1로 변환하는 것을 문자 인코딩라고 합니다.
  • 반대로 사람이 알도록 컴퓨터가 문자로 변환하는 것을 문자 디코딩라고 합니다.

ASCII (아스키 코드)

ASCII코드표
아스키코드 표

  • 아스키 코드는 단어당 1byte로 1비트의 에러 검출을 위한 패러티 비트(parity bit)7비트의 표현 가능 비트를 가졌습니다.
  • 128개의 문자를 표현가능합니다.
  • 하나의 단어에 1byte를 차지한다는 것을 안다는 것이 제일 중요합니다!!.

EUC-KR

한글을 지원하는 문자 집합을 제공합니다.
ASCII(아스키코드)의 표현 가능한 문자 수로는 한글을 표현하기에 턱 없이 부족하여, 등장한 인코딩 방식입니다.

  • 한글은 음절 하나에 초성, 중성, 종성의 조합으로 이루어져 있습니다.
    ex) 강, ㄱ(초성), ㅏ(중성), ㅇ(강성)
  • EUC-KR은 완성형 인코딩 방식으로 KS X 1001, KS X 1003이라는 문자 집합을 기반합니다.
  • 한 단어당 2byte의 크기를 차지합니다.
  • 뷁, 꿻, 믢 같은 문자는 지원하지 않습니다.

참고자료: KS X 1001, KS X 1003

유니코드(UTF-8, UTF-16)

UTF는 유니코드(문자 집합)를 사용하여 통일된 표준 인코딩 방식을 말합니다.
다국어를 지원하기 위해서 각 나라의 인코딩을 모두 알아야 하는 번거로움을 해결하기 위해 등장한 것이 유니코드입니다.

  • 가변형 인코딩 방식을 가집니다(1byte ~ 4byte)
  • 한글 데이터는 3byte 코드 포인트 그룹에 속한다고 할 수 있습니다.
첫 코드 포인트 마지막 코드 포인트 1바이트 2바이트 3바이트 4바이트
0000 007F 0XXXXXXX      
0080 07FF 110XXXXX 10XXXXXX    
0800 FFFF 1110XXXX 10XXXXXX 10XXXXXX  
10000 10FFF 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

 

"루"의 UTF-8로 인코딩된 이진수명 찾아보기

  • 루 의 유니코드는 U+B8E8입니다.
  • B8E8은 3번째 코드 포인트에 속합니다.
  • B는 1011, 8은 0100, E는 1110
  • 1001 0100 1110 0100 입니다.
  • X 자리에 대입하게 되는데요.
  • X 자리는 총 16자리 수를 표현할 수 있습니다. 즉 16비트이며, 위에서 구한 2진수 개수와 동일합니다.
  • 이 내용을 대입합니다.

인코딩 변환 결과
"루"의 UTF-8 인코딩 변환

  • 1110XXXX 10XXXXXX 10XXXXXX 에서 1001 0100 1110 0100 값을 대입하여 11101001 10010011 10100100(2) 라는 값을 가지게 됩니다.

 

 

긴 글 읽어주셔서 감사합니다!