sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
extra_vars6  

보수(complement)란?

각 진수에서 어떤값을 최대값으로 만들기 위해 보충해주는 수(값)이다.

 

예를 들어, 10진수의 최대값은 10일텐데 3의 보수는 7이 된다.

그리고 컴퓨터에서는 이러한 보수의 개념을 뺄셈 연산을 하기 위해 사용한다.

컴퓨터의 뺄셈에서 사용하는 예를 들면

8비트에서 255 다음은 256이고 컴퓨터는 256이 되면 0으로 초기화하여 다시 카운트 한다는 점을 이해하고

100 - 75 = 25 라는 수식을 컴퓨터 입장에서 만들어보자.

092215_0831_29.png

75의 보수는 255 - 75 = 180 이다.

그래서 100 + 75의 보수(180) 은 280 이고 255를 넘는 부분은 0으로 다시 카운트 되므로 자연스레 초과된 숫자가 뺄셈 결과로 나오게 된다.

280 - 255 = 25 <-- 최종값

컴퓨터는 뺄셈을 못하는 멍청한 기계이기 때문에 위와 같은 오버 카운트 원리를 이용하는 것이다.

보수의 의미는 이정도로 끝

 

그렇다면 1의 보수(one's complement)란?

컴퓨터에서 1의 보수는 2진수 n자리(n비트)에서 2n-1을 기수로 했을때의 보수를 의미한다.

1의 보수라는 용어는 컴퓨터(IT)에서만 사용하는 수학의 개념이기 때문에 사전적인 의미를 찾으면 죄다 IT 백과사전에서만 나온다.

사실 순수 수학에서의 1의 보수에 대한 의미를 파악하려고 무진장 검색했는데 헛고생임을 깨달았다.

1의 보수는 그냥 보수라는 말과 같은 말이다.

 

예를 들어, 0100 1011 이라는 2진수에 대한 1의 보수는 1111 1111 - 0100 1011 = 1011 0100 이 된다.

0100 1011 이라는 2진수의 각자리의 1과 0을 1->0, 0->1 식으로 수치 변환한 것과 같은 결과이다.

여기서, 실질적인 데이터 값은 7비트만 사용이 되고 최상위비트는 + - 부호를 결정하는 부호비트로 사용 된다.

 

그래서 부호비트가 필요없는 unsigned 에서는 1의 보수를 사용하여도 큰 문제가 없지만

signed 에서는 1의 보수를 사용할 경우 0이라는 숫자가

    +0 => 0000 0000

    -0 => 1111 1111 

이렇게 두가지가 있을 수 있기 때문에 컴퓨터에서는 2의 보수를 사용하게 된다. 

 

2의 보수는 1의 보수에서 +1를 한 것이다.

다음의 표와 같다.

 

십진수 이진수 2의 보수
0 0000 0000

0000 0000

(왜냐면 1111 1111 +1)

1 0000 0001 1111 1111

 

1의 보수를 사용 할 땐, 1111 1111 => -0 으로 계산 되는 것이
2의 보수를 사용 하면, 1111 1111 => -1로 계산 되어 진다.
   
이로써, 0이 2개가 반복 되는 것을 피할 수 있다.
대신, 범위는 -128 ~ +127이 된다.

 

최종적으로 컴퓨터에서 2의 보수로 뺄셈 연산 하는 방법이다.

 

양수는 이진수로 표현하고
음수는 2의보수로 표현해서
둘이 더하면 된다. ( 컴퓨터는 덧셈기 뿐 )

 

092215_0831_214.png

 

092215_0831_215.png

 

092215_0831_216.png

 

번호 제목 글쓴이 날짜 조회 수
공지 2023 Software Development Trend 정리 황제낙엽 2024.01.19 1
108 마이크로소프트 MSDN의 이해 file 황제낙엽 2018.09.18 69
107 효율적인 양식 디자인: 구조, 입력, 레이블 및 액션 file 황제낙엽 2018.05.08 79
106 마이크로소프트 제품의 라이선스 - 패키지(FPP)와 볼륨라이선스(Volume License) 황제낙엽 2018.04.12 83
105 효과적인 모바일 애니메이션 응용예 file 황제낙엽 2018.03.30 671
104 notepad2 에서 문서내의 일부 문자열의 byte 크기 알아내기 file 황제낙엽 2018.03.29 1208
103 부동소수점 연산에 관한 정리 황제낙엽 2018.03.26 1051
102 버튼 디자인의 고찰 (12가지 팁) file 황제낙엽 2018.02.07 68
101 스크래치는 왜 이름이 스크래치 인가? file 황제낙엽 2018.02.01 108
100 윈도우10 FPP,OEM,DSP,ESD 라이선스 file 황제낙엽 2017.10.24 265
99 Atom(에디터) file 황제낙엽 2017.08.31 311
98 엑셀(excel)에서 16진수 -> 10진수 변환 file 황제낙엽 2017.08.29 4294
97 어린이, 청소년용 프로그램 입문 황제낙엽 2017.05.03 69
96 마이크로소프트로부터 기술지원을 받기 위한 Access ID 발급 방법 황제낙엽 2016.12.05 37
» 컴퓨터는 음수를 2의 보수법으로 표현한다 file 황제낙엽 2016.10.24 753
94 변수를 unsigned int형 선언 0xffffffff 할당 결과가 -1이 되는 이유는? 황제낙엽 2016.10.24 376
93 0xFFFFFFFF의 값은 왜 -1인가? 황제낙엽 2016.10.24 177
92 unsigned와 signed 황제낙엽 2016.10.24 81
91 MSDN 라이선스 종류와 혜택 file 황제낙엽 2016.07.12 69
90 컴퓨터와 인간의 대화[20]-전각 문자와 반각 문자 황제낙엽 2016.04.22 122
89 컴퓨터와 인간의 대화[19]-인텔 HEX 황제낙엽 2016.04.22 28