티스토리 뷰
1의보수란 무엇인가?
0000 1010(2) 의 1의보수는
0000 0101(2) 이다. 방법은 간단하다. 1을 0으로 바꿔주고 0을 1으로 바꿔주는것이다.
그렇다면 2의 보수는 어떤것일까?
1의보수를 쓰게된이유는 음수를 나타내기 위해서이다. 그런데 1의 보수를 사용하게되면 문제가 생긴다.
그문제는 -0과 +0이 생긴다는것이다. 0000 0000 는 +0이고 1111 1111 은 -0이기때문에 쓸데없이
0이 두개나 생겨버리게된다. 그래서 고안한것이 2의 보수라는것이다.
먼저 어떻게 2의 보수를 만드는지 보도록하자
0000 1010(2) 의 2의보수
0000 0101(2)+1(2) = 0000 0110(2) 이다.
쉽지 않은가?
그럼 이제 2의보수를 사용해 뺄셈을 해보자.
사실 컴퓨터는 덧셈밖에 하지못한다. 뺄셈은 덧셈을 이용해서 하게된다.
무슨미친소리인가 하겠지만 정말이다.
9-4 = 9+(-4) 둘은 같지 않은가? 컴퓨터는 이렇게 뺄셈을 하게된다.
9(10) = 0000 1001(2)
4(10) = 0000 0100(2)
-4(10) = 1111 1011(2) + 1(2) 2의보수를 사용해서-4를 표현한다.
= 1111 1100(2)
9(10) + (-4(10)) = 0000 1001(2) + 1111 1100(2)
0000 1001(2) = 9(10)
+1111 1100(2) = + (-4(10))
─────────────────────────────────
10000 0101(2) = 5(10)
8비트로 처리되지않는 가장 앞에 9번째자리에있는숫자 1은 끊어버린다.
9번째 숫자가 나타나는 경우를 OVERFLOW 라고 합니다.
연필을 잡고 차근차근 계산해보길 바란다. 그러면 신기하게도 계산이 된다는걸 알 수 있을것이다.
출처 : http://blog.naver.com/ksunghwank
'기억하자정보 > 기타' 카테고리의 다른 글
데이터형에 따른 메모리 구조와 연산 (0) | 2006.09.25 |
---|---|
IEEE 754 - floating point (부동소수점) (0) | 2006.09.25 |
진수의 변환 10진수 -> 2진수 (0) | 2006.09.25 |
IEEE 754 의 형식 (0) | 2006.09.25 |
[관리방어] 7.umask를 이용한 파일 접근 권한 설정 문제 (0) | 2006.09.12 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.