※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)
보통 2진수를 표현하는 방법으로 컴퓨터는 2의 보수(2's Complement) 방법을 사용한다.
우선, 0 1 2 3 4 5 6 ... 15 를 각각 2진수로 나타내보자.(4비트로 표현하는 unsigned integer)
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
... ...
13 1101
14 1110
15 1111
이와 같이 표현할 수 있다. 그런데 문제는 음수를 표현하고 싶을 때는 어떻게 하느냐가 관건이다. Sign bit을 이용하는 방법, 1의 보수를 이용하는 방법 등이 제안되었으나 결국 현재 사용하고 있는 것은 2의 보수 방법이다.
2의 보수를 만드는 법은 간단하다. 그저 1은 0으로 바꾸고 0은 1로 바꾼 후 마지막에 1만 더해주면 된다. 식으로는 다음과 같이 표현 가능하다. -x = ~x + 1. 4비트로 표현 가능한 2진수를 모두 나열해보자.(4비트로 표현하는 signed integer)
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
2의 보수의 특징을 한번 살펴보자. 32비트의 환경에서 2의 보수 범위는 아래와 같다.
Unsigned : 0 ~ 4,294,967,295(2의 32승 - 1)
Signed : -2147483648(2의 32승) ~ 2147483647(2의 32승 -1)
보면은 굉장히 개념이 쉽다. 바꾸는 방법도 매우 간단하고... 우리가 겨우 이거 배우려고 Chapter 2의 그 많은 내용들을 공부했을까? 아니다. 중요한 것은 2의 보수 환경에서 프로그래밍했을 때 생기는 문제점들을 집어보는 것이라고 생각한다.
다음 프로그램의 문제점이 무엇일까?
#include <stdio.h>
int main()
{
char i;
for(i = 0; i < 128; i++){
printf("%d ", i);
}
return 0;
}
'System Programming' 카테고리의 다른 글
[SP] Virtual Memory (Basic Knowledge) (1) | 2013.04.23 |
---|---|
[SP] Virtual Memory (Basic Knowledge) (6) | 2013.04.23 |
[SP] Floating Point Number (0) | 2013.04.15 |
[SP] Data Representation (0) | 2013.04.09 |
[SP] 시작해보며... (0) | 2013.04.06 |