컴퓨터는 binary system을 활용하여 현실세계에서 다루는 다양한 자료를 다룬다. 이들을 어떻게 binary화 하는지 알아보자.
10진수와 2진수를 수학적으로 바꾸는 법은 이미 수학 시리즈에서 다루었다.
또한 8진수와 16진수는 2의 n승이기 때문에 2진수의 개수를 늘려 표현함으로서 쉽게 구현할 수 있다. 예를 들어 8진수는 2진수 3자리를 1자리로 사용하면 구현할 수 있다.
2진수의 양수와 음수는 여러가지 방법으로 표현할 수 있다.
이때 컴퓨터는 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) 세 가지 기본 코드를 제안함.
한글의 경우 초성 중성 종성을 따로 비트로 나눠 기록하는 조합형과 각 한글문자에 대해 따로 이진코드를 두는 완성형이 있는데 현대에서는 완성형을 사용하고 있다.