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
148 REST, REST API, RESTful [2] 황제낙엽 2021.01.11 91138
147 Character Entity Set(s) 황제낙엽 2013.06.24 55459
146 엑셀(excel)에서 16진수 -> 10진수 변환 file 황제낙엽 2017.08.29 4294
145 설치형 블로그, 위키, 게시판 모음 황제낙엽 2006.09.20 4131
144 반올림하는 두 가지 방법 (Round-off(사사오입), Round-to-nearest-even(오사 오입)) file 황제낙엽 2019.08.27 1340
143 notepad2 에서 문서내의 일부 문자열의 byte 크기 알아내기 file 황제낙엽 2018.03.29 1208
142 부동소수점 연산에 관한 정리 황제낙엽 2018.03.26 1051
» 컴퓨터는 음수를 2의 보수법으로 표현한다 file 황제낙엽 2016.10.24 753
140 효과적인 모바일 애니메이션 응용예 file 황제낙엽 2018.03.30 671
139 2020 클라우드 정리 - cloud, aws, azure, gcp, iaas, paas, saas 황제낙엽 2020.04.05 664
138 XQL 황제낙엽 2003.07.10 576
137 아웃룩(Outlook 2010) 메일 보관 경로(.pst) 변경과 백업/복구 file 황제낙엽 2009.12.28 504
136 2019년 웹 프레임워크 인기 순위 file 황제낙엽 2020.04.06 470
135 음성인식서비스 개발을 위한 음성 API 모음(STT API) 황제낙엽 2019.04.28 465
134 자료구조 Part1. "동적배열"의 모든 것. 황제낙엽 2007.11.24 431
133 소프트웨어 개발 환경 갖추기 황제낙엽 2006.09.21 408
132 사랑비 BGM 보안 취약점 황제낙엽 2008.08.02 405
131 Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(2) 황제낙엽 2007.11.20 383
130 변수를 unsigned int형 선언 0xffffffff 할당 결과가 -1이 되는 이유는? 황제낙엽 2016.10.24 376
129 EULA (End User License Agreement) ; 소프트웨어 사용자 라이선스 계약 황제낙엽 2015.06.26 368