본문 바로가기
Computer Science

CS - #2. 2진법, 16진법 표현

by KMS_99 2023. 9. 11.

CS - #2. 2진법, 16진법 표현

컴퓨터는 우리가 주로 사용하는 10진법을 이해하지 못한다.

컴퓨터가 이해하는 수는 2진법으로 0과 1로 이루어진 수이다.

 

관련한 내용을 알아보기 전 컴퓨터에서 사용하는 정보의 단위부터 알아보자.

 

1. 정보단위

컴퓨터는 0과 1로 이루어진 수를 이해한다.

이렇게 0과 1로 표현할 수 있는 최소 단위를 비트(bit)라고 한다.

1비트로 표현할 수 있는 경우의 수는 0이나 1로 2가지이다.

그렇다면 2bit로 표현 가능한 경우의 수는 몇가지 일까?

2bit는 말그대로 두개의 비트가 있는 경우로 위 내용처럼 4가지의 경우의 수를 발생시킨다.

우리는 여기서 규칙을 찾아서 3bit, 4bit 등 표현 가능한 개수를 찾을 수 있다.

컴퓨터에는 여러가지 정보 단위들이 있다.

최소단위인 bit를 기준으로 해당 정보 단위들의 규모를 알 수 있다.

정보 단위 크기
1byte 8bit
1kB 1000byte
1MB 1000kB
1GB 1000MB
1TB 1000GB

예를 들어 1byte는 8bit이기 때문에 2의 8승개의 경우의 수를 가진다.

 

2. 이진법

이진법은 0과 1로 숫자를 표현하는 방법이다.

우리가 평상시에 사용하는 십진수 10과 이진수 10은 다른 숫자이다.

2진수로 표현한 10은 2^(1) * 1 + 2^(0) * 0으로 10진수로 표현하면 2가 된다.

우리가 프로그래밍을 하면서 2진수를 입력할때도 있을 것이며, 10진수를 입력할 때도 있을 것이다.

그렇다면 위와같은 경우에는 어떻게 구별을 해야할까?

이러한 혼란을 예방하기 위해서 2진수 앞에 0b를 붙인다.

따라서 2진수 10을 입력할때 0b10이라고 하면 되겠다.

 

그렇다면 2진수로 음수를 표현하는 방법은 무엇일까?

2진수로 음수를 표현하기 위해 우리는 2의 보수를 구하여 음수로 간주한다.

2의 보수란 어떤 수를 그보다 큰 2^n에서 뺀 값을 뜻한다.

이해가 잘 안될 것이다. 

다음 설명을 보자. 

여기서 0b11보다 큰 2^n이 0b100인 이유는 이진수 11에서 최대 2^n이 2^1이기 때문에 이것보다 큰 2^n이 2^2가 되는 것이다. 따라서 0b100이 된다.

 

우리가 언제나 이렇게 계산을 할수는 없다.

 

2의 보수를 쉽게 구하는 방법은 각 자리의 0과 1을 반대로 바꾸고 2^0자리에 1을 더해주는 것이다.

이렇게 2의 보수를 구한다고 해서 컴퓨터에서는 정확히 이것이 음수인지 판단할 수 없다.

따라서 컴퓨터에서는 양수인지 음수인지 구분하기 위해 플래그를 이용한다.

이 내용은 추후 배울 내용이다.

 

3. 16진법

16진법은 0부터 15까지 값을 표현하며, 16이 되면 다음 자리수로 올림을 진행한다.

1~9는 기존 10진법처럼 표현하며, 10~15는 A~F 알파벳 대문자로 표현한다.

 

16진수는 컴퓨터에서 구별하기 위하여 0x를 붙힌다.

 

그렇다면 16진법을 프로그래밍에서 자주 사용하는 이유가 뭘까?

16진법은 2진법으로 변환하기 아주 좋다.

16진법은 한글자에 16개의 경우의 수가 있다.

이를 2^4개의 경우의 수로 볼 수 있기때문에 결국 4bit와 같다.

따라서 16진수의 한글자는 이진수로 4bit와 같다.

 

4. 2진수로 문자 표현

0과 1로 이루어진 2진수로 숫자 뿐만아니라 문자도 표현이 가능하다.

2진수로 문자를 표현할 때 사용되는 다음 용어들을 기억하자

  • 문자집합
  • 인코딩
  • 디코딩

문자 집합은 컴퓨터가 표현할 수 있는 문자의 모음이다. 

인코딩은 문자를 2진수로 변환하는 과정이다.

디코딩은 2진수를 문자로 변환하는 과정이다.

 

문자 인코딩 방법은 여러가지가 있다.

  • 아스키코드
  • EUC-KR
  • CP949
  • 유니코드 

많은 방법이 있지만 위 방법에 대해서만 알아보겠다.

 

- 아스키코드

아스키코드는 초창기 문자 집합중 하나로 영어, 아라비아숫자, 일부 특수문자를 표현한다.

7bit로 표현하며, 총 표현가능한 문자의 개수는 2^7 = 128개의 문자이다.

아스키 코드이 단점은 표현가능한 문자의 개수가 작다는 것이다. 특히 한글을 표현할 수 없다.

 

- EUC-KR

한글 문자 집합이다. 한글은 특수한 문자로 초성, 중성, 종성의 조합으로 이루어 져있다. 

따라서 인코딩 방법에는 완성형, 조합형 으로 나누어져있다.

완성형 인코딩은 완전한 글자를 인코딩하는 것이며, 조합형 인코딩은 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 나누어 해당하는 코드를 합하여 하느의 글자 코드를 만드는 방식이다.

우리가 알아볼 EUC-KR은 완성형 인코딩 방식을 사용한다.

2byte크기로 글자를 표현하며,16bit이기 때문에 일반적으로 4자리 16비트로 표현한다.

총 2350개 정도의 한글 단어를 표현하며, 아스키 코드보다는 많은 수의 한글을 표현하지만 전부 표현하지는 못한다.

따라서 이를 확장하여 나온 것이 CP949이다.

하지만 CP949 역시 모든 한글 단어를 표현하지 못한다.

 

- 유니코드

유니코드는 많은 나라의 언어가 통합된 문자집합과 인코딩 방식을 지원한다.

따라서 각각의 언어별로 인코딩하는 수고를 덜어준다.

유니코드는 현대의 문자를 표현할 때 가장 많이 사용되는 표준 문자집합이라고 볼 수 있다.

유니코드는 글자마다 부여된 값을 그대로 인코딩 값으로 사용하지 않는다.

UTF-8, UTF-16 등 의 인코딩 방법을 지원하며, 가장 대중적인 방식은 UTF-8이다. 

 

'Computer Science' 카테고리의 다른 글

CS - #4. ALU, 제어창치, 레지스터  (0) 2023.09.20
CS - #3. 소스 코드, 명령어  (0) 2023.09.14
CS - #1. 컴퓨터 구조  (0) 2023.09.10