Skip to content

Code for Number (Symbol)

Code
일상 생활에서 사용되는 문자나 숫자 를 컴퓨터가 인식하기 위해 기호 화한 것.

컴퓨터에서 내부적으로 계산을 위해 사용하는 것 (number의 의미)은 이진수2's complement 이다. 하지만, 컴퓨터가 인간이 사용하는 number를 표현하고 인식하기 위한 경우 사용되는 code들은 다음과 같음.

이들 Code들은 Number들의 symbol에 초점을 맞춘 것이라고 볼 수 있다. 마치 컴퓨터에서 영문자를 ASCII로 표현하는 것과 유사하다. 컴퓨터가 각 문자의 의미를 통한 이해는 natural language prcoessing으로 AI 등의 매우 중요한 분야이며 아직도 활발히 연구되고 있는 분야이다. 컴퓨터에서 영문자를 ASCII로 표현한 것은 1963년이지만, 컴퓨터가 문자의 의미를 이해하고 사람과 대화하는 기술은 2023년에도 ChatGPT 등의 매우 최신 기술에 해당한다.

  • Internal Representation : 계산이 효과적으로 이루어지는데 집중.
  • External Representation : 인간등에게 숫자를 보여지거나, 입력장치로부터 숫자(엄밀하게 숫자 기호)를 입력받을 때 사용됨.

즉, 여기서 다르는 code들은 external representation이라고 보면 된다.

Binary Coded Decimal System

10진수에서 각 자리의 digit을 각각 16진수로 변경 하고 각각의 16진수를 4bit의 binary로 변환하여 표현한 것.

컴퓨터의 계산 결과를 인간에게 출력할 때는 10진수로 보여줘야 하며, 이 경우 활용되는 code임.

  • 8-4-2-1 코드라고도 불림.

사실 BCD는 각 digit을 4bit의 binary number로 표현하는 것인데, 4bit를 기억하기 위해 위의 설명에서는 16진수를 중간에 도입한 것 뿐임.

23라는 10진수는 2개의 digit으로 구성되는데, 이를 BCD로 변경시 1개의 digit당 4bit가 할당되어 8bit로 표현된다.

  • 2 : 0010로 변환
  • 3 : 0011로 변환
  • 즉, 최종적으로 0010 0011로 표시된다.

과거에 BCD를 사용하던 컴퓨터(2세대 컴퓨터들)도 있었지만, 현재 내부적으로 BCD를 쓰는 컴퓨터는 없음. 단, encoding등에서 해당 개념을 많이 차용한 경우가 많다보니 어떻게 변환하는지 정도는 알고 있는게 도움이 됨.

장단점

장점

  • 10진법에서 2진법으로 변환을 가장 쉽게 할 수 있음.

단점

  • bit의 낭비가 크다. 10진수의 1자리를 표현하는데, 16개를 구분가능한 4bit를 할당 하고 있어서 나머지 6종류를 구분할 수 있는 능력 이 허비되는 방식.
  • complement를 구하기 어려움.

Extended Binary Coded Decimal Interchange (EBCDI) Code.

10진수(decimal)을 4bit로 표현하는 BCD code를 확장하여 8비트로 표현한다.
문자 기호에 대한 코드를 추가 등을 위해 8bit로 확장을 시킨 것으로 상위 4비트가 Zone을 나타내고, 하위 4비트는 앞서 본 BCD 이다.

  • 일반적으로 Zone은 1111로 표현되며,
  • sign (부호)는 가장 하위자리의 Zone으로 표현되고
    • + sign은 1100으로
    • - sign은 1101로 표현된다.

다음 \(+897_{10}\) 의 EBCDI Code를 살펴보라.

Zone 8 Zone 9 Sign 7
1111 1000 1111 1001 1100 0111

EBCDIC는 문자 기호들에 대한 코드들도 포함시켰기 때문에 한 기호당 8비트를 차지하도록 확장되어 숫자만 사용하는 경우에는 낭비가 심하다.
때문에 Packed 10진수 방식 과 같이 문자기호를 위해 확장된 zone을 제거하고 BCD 만을 사용하는 경우도 있다. (단, sign에 해당하는 4bit는 맨 하위로 보내짐)

\(+897_{10}\)을 Packed BCD Code로 나타내면 1000 1001 0111 1100가 됨.

EBCDIC는 IBM이 제안한 방식이나 ASCII에 밀려서 현재는 컴퓨터 내부적으로는 이용되지 않는다 (연산용은 아니라는 애기임).
단, 숫자를 표현하는 code로서 BCD는 숫자를 display 또는 입력받을 때, 또는 통신으로 주고받는 등의 경우 등에 차용되어 사용되는 경우가 아직도 존재한다.


Excess-3 Code

  • BCD 코드는 2진수 표현에 가깝고 encoding에 용이하나, complement(보수)에 대한 계산 및 처리가 까다롭다는 단점을 가짐.
  • 이를 보완하기 위해 BCD 코드에 +3을 한 것이 Excess-3 Code 임.
  • 이는 9의 보수를 매우 쉽게 얻을 수 있음.(Self-complementing code) : 1's complement를 취하면 자동으로 9의 보수를 얻게 됨.

Gray Code ***

  • Gray코드는 0에서 9까지 순환적으로 변할 때, 각 과정마다 오직 한 비트만 변화됨.
  • 때문에, Gray 코드를 사용하여 순환적으로 값이 입력되는 경우, 입력 도중의 에러나 오차를 쉽게 검출할 수 있으며, 변경할 bit가 적다는 장점을 가짐.
  • BCD 코드의 인접하는 비트를 XOR 연산하여 만들어짐 코드.
  • A/D변환, 입/출력 장치 등에 많이 사용됨.
    • 2-bit Gray code의 경우, quadrature encoding라고 불리며, 2개의 센서만으로 모터의 회전축이 얼마나 회전했는지, 어느 방향으로 회전했는지, 더불어 회전 속도 등을 확인할 수 있어서 knob과 같은 장치 등에서 많이 사용된다 (제어에도 사용가능).
    • 2개의 센서로 구성된 Quadrature encoder의 경우, 1/4096 회전을 감지할 수 있음 (1/4096 회전 resolution을 absolute position encoder로 만들려면 12개의 sensor가 필요: \(2^{12}=2^2\times 1024=4096\))

보다 자세한 건 다음 URL을 참고할 것 : Gray Code and Quadrature


BCD, Express-3, and Gray code

다음 table은 숫자를 표현하는 3가지 code를 보여준다.

Decimal BCD Express-3 Gray
0 0000 0011 0000
1 0001 0100 0001
2 0010 0101 0011
3 0011 0110 0010
4 0100 0111 0110
5 0101 1000 0111
6 0110 1001 0101
7 0111 1010 0100
8 1000 1011 1100
9 1001 1100 1101