- 컴퓨터 시스템이 2진법인 이유는 컴퓨터의 저수준 계층이 각각 켜고 끄는 스위치인 트랜지스터로 구성되어 있기 때문임.
- 숫자 0과 양의 정수
- 0이라는 개념을 표현하기 위해 위치 기수법을 사용하여 값과 숫자의 위치를 표현함.
- ex) 숫자 5를 2진법으로 표기하면 101(2) 임. → 1 x 2^2 + 0 x 2^1 + 1 x 2^0
- 비트 k개를 사용하면 정수 2^k개를 나타낼 수 있음.
- ex) k가 8 비트이면, 표현 가능한 범위는 0~255 임. → 부호 없는 정수에 해당함.
- 부호 있는 정수
- 부호 없는 정수를 나타내려면 부호 있는 정수에서 표현 범위를 반으로 나누면 됨.
- ex) 4비트 부호 없는 정수 → 0~15
- 부호 있는 정수는 1~7, 그리고 -8~-1 까지 표현할 수 있음.
- 비트로 표현한다면, 최상위 비트를 정수 부호로 결정하면 됨.
- 양수에 음수 기호를 붙이면 바로 대응하는 음수 : 부호-크기 표현
- 0010이 +2 라면, -2는 최상위 비트만 1로 바꾸기만 한 1010으로 표현할 수 있음.
- 0000 → 0
- 0001 → 1
- 0010 → 2
- 0011 → 3
- 0100 → 4
- 0101 → 5
- 0110 → 6
- 0111 → 7
- 1000 → -0
- 1001 → -1
- 1010 → -2
- 1011 → -3
- 1100 → -4
- 1101 → -5
- 1110 → -6
- 1111 → -7
- 근데 1000이 -0으로 표현되는게 이상함.
- 부호-크기 표현의 반전: 1의 보수
- 0010이 +2 니까, 이를 완전히 반전시킨 1101 을 -2로 표현하는 생각을 할 수 있음.
- 0000 → 0
- 0001 → 1
- 0010 → 2
- 0011 → 3
- 0100 → 4
- 0101 → 5
- 0110 → 6
- 0111 → 7
- 1000 → -7
- 1001 → -6
- 1010 → -5
- 1011 → -4
- 1100 → -3
- 1101 → -2
- 1110 → -1
- 1111 → -0
- 이 방법을 1의 보수라고 함.
- 이러한 숫자 표현 방식은 이론상으로 설계가 가능하지만, 실제로 두 숫자를 더할 때 문제가 있었음.
- 간단하지 않은 두 수 더하기
- ex) 2 + (-2)
- 부호-크기 표현 방식에서 2는 0010, -2는 1010임.
- 이진수 덧셈을 수행하면 1100이 나옴 → 부호-크기 표현 방식에 따르면 -4임. 즉 결과가 모순됨.
- 1의 보수에서 2는 0010, -2는 1101임.
- 이진수 덧셈을 수행하면 1111이 나옴 → -0에 해당함. 값이 우하하진 않지만, 모순된 결과는 아님.
- 컴퓨터의 덧셈은 가산기 조합 회로로 구현됨.
- 부호-크기 표현이나 1의 보수를 이용하여 덧셈 계산하려면 부호 있는 숫자의 정확한 덧셈을 보장하는 조합 회로를 추가하는 것이 불가피 함.
- 컴퓨터 친화적 표현 방식: 2의 보수
- A + (-A) = 0 이면서 0을 표현하는 2진법이 0000 으로 표현하는 방법이 필요함.
- 0000 → 0
- 0001 → 1
- 0010 → 2
- 0011 → 3
- 0100 → 4
- 0101 → 5
- 0110 → 6
- 0111 → 7
- 1000 → -8
- 1001 → -7
- 1010 → -6
- 1011 → -5
- 1100 → -4
- 1101 → -3
- 1110 → -2
- 1111 → -1
- 이 표현 방식에는 -0이 없음.
- -1 (1111)에 1을 더하면 확실히 0000을 얻을 수 있음.
- 근데, 자리 올림수가 존재함. → 실제론 10000임.
- 하지만 우리는 자리 올림수를 무시함.
- 가산기에서 계산을 수행할 때는 숫자 부호에 전혀 신경 쓸 필요가 없음.
- 이러한 숫자 표현 방식이 바로 현대 컴퓨터 시스템에서 사용되는 2의 보수임.
- CPU는 정말 숫자를 알고 있을까?
- 현대 컴퓨터가 2의 보수 표현 방식을 사용하는 근본적 이유는 사람에게는 직관적이지 않지만, 회로 설계를 단순히 할 수 있기 때문임.
- CPU는 사실 0010이 2인지 이해하지 못함.
- 단지 두 비트의 배타적 논리합 연산이 덧셈의 결과라는 것과 두 비트의 논리곱 연산이 자리 올림수라는 것만 알고 있음.
- CPU는 단순한 세포와 같아서 명령을 내리면 실행할 뿐임.
- 이제 CPU에 입력하는 것이 가능해짐.
- 출력 역시 사실 0과 1의 연속임.
- 이 값은 숫자로 인식할 수 도 있고, 문자열로 인식할 수도 있음. RGB 기반 색상으로 인식할 수도 있음.
댓글