Computer Science/Computer Architecture
1의 보수와 2의 보수
h2boom
2024. 6. 19. 17:18
보수
- 보수 : 보충해주는 수로 어떤 수를 만들기 위해 필요한 수
- n의 보수 = 어떤 수에 대해 n의 제곱수가 되도록 만드는 수
- ex) 4에 대한 10의 보수는 6이다.
- = 4에서 10을 만들기 위해 필요한 수는 6이다.
- n진법에는 n의 보수와 n-1의 보수가 사용된다.
- 쉽게 말해서 2진법에서는 2의 보수와 1의 보수가 사용된다.
- n진법에서 n-1의 보수는 (n의 보수 - 1)이 된다.
- ex) 2진법에서 1의 보수는 2의 보수 - 1 이다.
- 컴퓨터 내부에서는 덧셈만 가능하기 때문에 보수를 사용한다
- A - B의 경우 ㅡ> A + (B의 보수)로 바꿔 계산한다.
- 결국 음수를 표현하고 계산하기 위한 방식
- 캐리: 최상위 비트(MSB)에서 자리 올림이 발생하는 것.
- ex) 2진수 1000 + 1111 ㅡ> 1 0111로 최상위 비트에서 자리 올림이 발생, 즉 캐리가 발생했다는 의미다.
- 부호가 있는 2진수의 표현의 경우 최상위 비트(MSB)가 0이면 양수, 1이면 음수로 구분한다.
1의 보수
- 1의 보수 구하는 방식
- 각 자리의 비트 값을 반전 OR 2의 보수 - 1
- ex) 2진수 0101의 1의 보수는 1010
- ~ (tilde) 연산을 비트에 사용하게 되면 비트가 반전된다.
- 1의 보수를 구하는 방식과 같다.
- 1 ㅡ> 0, 0ㅡ> 1로 비트 반전.
- 1의 보수 단점으로는 +0, -0으로 0이 둘 다 있고 캐리가 발생하는 경우 +1 을 해야 한다.
2의 보수
- 2의 보수는 1의 보수의 단점(+0, -0으로 0이 두 개, 캐리 발생)이 모두 해결이 된다.
- 2의 보수 구하는 방식
- 1의 보수 + 1 = 어떤 수의 비트를 반전시킨 후 + 1
- 2의 보수 사용 예시
- ex) ~1을 구해보자
- 1. 10진수 1은 2진수로 0001, ~1 = ~0001
- 2. ~0001 = 1110, 부호가 있는 정수에서는 최상위 비트(MSB)가 1 이면 음수
- 3. 1110은 음수를 표현하기에 2의 보수를 구한다.
- 4. 2의 보수 = 1의 보수 + 1
- 5. 1110의 1의 보수는 비트 반전을 해준 0001이며 0001 + 1 = 0010 = 2
- 6. 원래 값은 음수였기에 값에 - 부호를 붙인 -2가 답이다.
- ex) ~1을 구해보자