-
보수를 이용해 뺄셈을 할 때 자릿수가 맞지 않는 경우개발/etc 2024. 6. 28. 15:06
9 - 6을 연산을 해보자.
9의 이진수: 1001
6의 이진수: 0110
6의 2의 보수: 1001(1의 보수) + 1 -> 1010
1001 + 1010 = 0011은 3이므로 잘 된다. 올림이 일어난 비트는 버려지기 때문에 문제 없다.
16 - 6을 빼면 어떨까?
16의 이진수: 0001 0000
6의 2의 보수는 1010인데 비트 수를 맞춰야 하니까 0000 1010으로 해서 더해보면 0001 1010이 되므로 26이 나와버린다. 이렇게 된 이유는 신호 확장을 올바르게 하지 못했기 때문이다. 보수를 구해서 덧셈을 했지만 우리는 뺄셈을 해야 하는 것이다. 즉 빼는 수가 음수라는 의미. 이진법에서 음수를 표현하는 방법은 최상위 비트를 1로 두는 것인데 우리의 사례처럼 비트 수를 확장해야 하는 경우에 "신호 확장"이란 걸 해야 한다. 음수를 나타내면서 1010을 신호 확장하면 1111 1010이 된다. 0000 1010은 양수의 신호 확장이다.
다시 해보자. 16의 이진수인 0001 0000을 1111 1010과 더하면 0000 1010이 남는다. 우리가 기대한 결과가 잘 나온다.
'개발 > etc' 카테고리의 다른 글
넷플릭스에서 2K 해상도로 시청하기(feat. 뭘 해도해도 안 될 때) (1) 2024.12.22 인터넷 브라우저가 최초 실행 시 로딩이 긴 경우 해결법 (1) 2024.09.25 정리된 인증 과정 (0) 2024.04.16 [git] 터미널에서 특정 브랜치 삭제하기 (0) 2024.03.01 [IntelliJ] 타임리프 및 클래스 변경 핫 리로드 적용하기 (0) 2024.02.24