공부하는 스누피

[컴퓨터구조] 2의 보수 표현법 (two's complement) 본문

CS/컴퓨터구조

[컴퓨터구조] 2의 보수 표현법 (two's complement)

커피맛스누피 2020. 11. 7. 18:27

양수와 음수를 구별하는 표현방법 중 부호와 크기(sign and magnitude) 표현법은 가장 단순한 방법으로 숫자 앞에 별도의 부호(+, -)를 붙이는 방법이다. 하지만 컴퓨터에서 이렇게 수를 나타내면 0에도 부호가 붙어 양의 0과 음의 0을 갖게 되어 쓰이지 않는다.

 

그래서 이진 비트에서 0들이 앞에 나오면 양수이고 1들이 앞에 나오면 음수가 되도록 표현하는 방식을 사용하게 되었고, 이를 2의 보수(two's complement) 표현법이라고 부른다.

 

2의 보수란 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수이다. 주어진 이진수의 모든 자리의 숫자를 반전시킨 뒤, 1을 더하면 2의 보수를 얻을 수 있다. 컴퓨터는 음수를 2의 보수를 취해 표현한다.

 

0 = 0000 0000 .... 0000 0000
1 = 0000 0000 .... 0000 0001
2 = 0000 0000 .... 0000 0010
-1 = 1111 1111 .... 1111 1111
=> 2의 보수 : 0000 0000 .... 0000 0000 + 1 = 1
-2 = 1111 1111 .... 1111 1110
=> 2의 보수: 0000 0000 .... 0000 0001 + 1 = 2

 

2의 보수 표현법에서 모든 음수는 MSB(Most Significant Bit)가 1이다. 따라서 하드웨어가 양수인지 음수인지 알아보려면 MSB만 검사하면 되고, MSB를 부호 비트(sign bit)라고 부른다. 

 

- 빠른 계산법

2 = 0000 0000 .... 0000 0010
=> 0은 1로, 1은 0으로 바꾸고 1을 더하여 부호를 바꾼다.
1111 1111 .... 1111 1101
+                            1
1111 1111 .... 1111 1110
= -2
=> 0은 1로, 1은 0으로 바꾸고 1을 더한다.
0000 0000 .... 0000 0001
+                            1
0000 0000 .... 0000 0010
= 2

 

- 빠른 부호확장(sign extension)

n비트로 표현된 이진수를 n비트보다 긴 수로 바꾸는 방법이다.

짧은 이진수의 MSB를 가져와서 비어 있는 왼쪽 부분에 채우고, 원래의 n비트 값은 긴 수의 오른쪽 부분에 그대로 복사하는 것이다.

 

0000 0000 0000 0010 = 2
=> 32비트로 / MSB 0 복사 & 오른쪽 부분에 원래 값 복사
00000000 00000000 00000010

=> -2로 만들기
1111 1111 1111 1101
+                         1
1111 1111 1111 1110
=> 32비트로 / MSB 1 복사 왼쪽 부분에 붙여넣기 & 오른쪽 부분에 원래 값 복사
11111111 11111111 11111111 11111101

 

+ 1의 보수법

모든 비트의 0과 1을 맞바꿔서 음수를 만들 수 있다. 

00..00은 양의 0이고 11..11은 음의 0으로 양수와 음수의 개수가 같다.

 

+ 바이어스된 표현법(biased notation)

절대값이 가장 큰 음수를 00...000으로 표현하고 가장 큰 양수는 11...11로 표현하며, 0은 10...00으로 표현하는 방식이다. 숫자에 바이어스값을 더하여 항상 양수로 표현한다.

Comments