코드

Solf·2023년 6월 27일
0

논리회로

목록 보기
3/8

컴퓨터는 binary system을 활용하여 현실세계에서 다루는 다양한 자료를 다룬다. 이들을 어떻게 binary화 하는지 알아보자.

수 체계


10진수/2진수

10진수와 2진수를 수학적으로 바꾸는 법은 이미 수학 시리즈에서 다루었다.
또한 8진수와 16진수는 2의 n승이기 때문에 2진수의 개수를 늘려 표현함으로서 쉽게 구현할 수 있다. 예를 들어 8진수는 2진수 3자리를 1자리로 사용하면 구현할 수 있다.

2진수의 음수/실수 표현법

음수

2진수의 양수와 음수는 여러가지 방법으로 표현할 수 있다.

  • 부호와 절대치 표현 : 최상위 1비트를 부호비트로 사용하여 0이면 + 1이면 -로 사용하는 방법
  • 1의 보수 표현 : 양수는 이진수 그대로 적고 음수는 그 수의 0은 1로 1은 0으로(toggle) 바꿔서 사용하는 방법
  • 2의 보수 표현 : 양수는 이진수 그대로 적고 음수는 1의 보수에 +1을 하여 사용하는 방법

이때 컴퓨터는 2의 보수 표현을 활용하여 음수를 표현하게 되는데, 이는 보수를 사용하면 가산기만으로도 뺄셈이 가능하기 때문이다. 또한, 2의 보수를 사용하면 1의 보수와 달리 논리적 오류도 없고 표현할 수 있는 숫자의 범위도 1개 더 많다.

실수

컴퓨터는 실수를 부동소수점수의 표현을 활용하여 구현한다.
부호, 지수부, 가수부로 비트가 나눠져 있다.

부동소수점수는 일단 이진수를 과학적 표기방법으로 정규화 한다.

ex) 75.6875 (10) = 1001011.1011(2) = 1.0010111011(2) x 2^6 = 1.0010111011(2) x 2^110(2)
이때 부호비트는 양수기 때문에 0 지수부 127 + 6 가수부 0010111011 이 들어간다.
부호 비트 : 부화와 절대치 표현과 마찬가지로 0이면 + 1이면 -이다.
지수부 : 해당하는 값이 2의 n승에 해당하는지가 들어간다. (127 + n의 값을 넣는다, 따라서 127을 기준으로 음양수 지수가 나뉨)
가수부 : 1.을 제외한 실제 값에 해당하는 부분이 들어간다.

컴퓨터 cpu가 32bit 64bit에 따라 단일정밀도 부동소수점수(총 32bit를 사용)/2배정밀도 부동소수점수(총 64bit를 사용)로 나뉘며 이에 따라 지수부에서 더했던 127도 달라지게 된다.

코드


숫자코드

BCD(Binary-coded decimal) : 10진수를 그대로 이진수 네자리를 묶어 표현하는 방법

가중치코드 : 위치(자리수)에 따라 정해진 값을 가지는 코드 ex) 8421코드 : 각자리수가 4째자리부터 순서대로 8 4 2 1에 해당하는 값을 가져 이진수 4자리로 총 16개의 숫자(0~15)를 표현

그레이 코드(gray code) : 가중치가 없는 코드인데 연속되는 숫자(ex 1,2)간에 하나의 비트만 변화해 새로운 코드가 된다. 이때 하나의 비트만 변화하기에 오류가 발생하더라도 연속한 숫자로 변해 범위가 크게 벗어나지 않는다는 장점이 있다.

위 과정과 같이 XOR 논리게이트를 활용해 2진수와 그레이 코드를 상호변환 변환할 수 있다.

에러검출 및 정정 코드

에러 검출 코드는 데이터를 전송하는 과정에서 데이터가 손상되었을때 이를 검출 할 수 있도록 만들어진 코드이다. 또한 에러 정정코드는 에러가 일어난 부분을 특정하여 복원할 수 있는 코드를 의미한다.

패리티 비트 : 짝수/홀수 패리티로 나뉘는데 최상위 비트에 위치하여 짝수라면 코드의 1의 개수가 짝수가 되도록 값이 정해지며 홀수라면 홀수가 되도록 값이 정해진다. 에러 검출에 활용할 수 있다.

병렬 패리티: 패리티 비트를 2차원 배열로 적용함으로서 이상적인 조건에서 오류 위치를 특정하여 데이터를 복원할 수 있다.

해밍 코드(hamming code) : 병렬 패리티에 비해 더욱 일반적인 상황에 사용가능하며 에러 검출과 정정이 모두 가능한 코드이다. 그러나 마찬가지로 한계는 존재한다.

문자코드

ASCII code(American Standard Code for Information Interchange) : 미국 국립 표준 연구소(ANSI)가 제정한 정보 교환용 미국 표준 코드 (128가지 문자 표현가능)

표준 BCD 코드 : 6비트로 하나의 문자를 표현, 최대 64문자 표현 가능

EBCDIC 코드 : 대형 컴퓨터와 IBM계열 컴퓨터에서 많이 사용되고 있는 8비트 코드 256종류의 문자코드를 표현할 수 있음

유니코드(Unicode) : 유니코드는 플랫폼, 프로그램, 언어에 상관없이 모든 문자에 고유 번호를 제공 수학기호 구두표시 전문기호 기하학적 모양 딩벳 기호등도 담고있다. (아스키의 경우 영어만을 지원했지만 인터넷 시대의 표준을 지원하고자 나옴)
32bit(UTF-32), 16bit(UTF-16), 8bit(UTF-8) 세 가지 기본 코드를 제안함.

한글의 경우 초성 중성 종성을 따로 비트로 나눠 기록하는 조합형과 각 한글문자에 대해 따로 이진코드를 두는 완성형이 있는데 현대에서는 완성형을 사용하고 있다.

profile
CS/Software Engineer

0개의 댓글