;;
일단 바보 같은 방법으로 풀었다. 한번 봅시다
0101(2) = 5
1011(2) = 11
5에서 11을 빼면 -6(10) 이라는 10진수 결과를 얻을 수 있음.
-6을 2진수로 변환하면 -0110(2)
-0110(2)의 1의 보수는 1001(2)
우리가 구해야 할건 2의 보수니까 여기서 1을 더해준다면 ?
1001(2)
1001 + 1 ------- 1010
2의 보수 4비트의 정수 0101과 1011의 뺄셈
양수는 보수로 변환을 할 필요가 없으니까 그대로 0101을 사용합니다.
음수는 보수로 변환을 해야하죠. 1011의 1의 보수는 0100이 되고, 2의 보수는 0101이 됩니다.
그러면 0101 + 0101이 된다!
0101 + 0101 ------- 1010
원래 자리올림수가 발생해야 하는데 자리올림수가 발생하지 않았으므로
음수(오버플로)이고, 해당 수의 2의 보수를 취하면 0110이므로 음수 0110이 됩니다.
2진수 연산에서 자리올림수가 0인데 자리올림수 다음 캐리값이 1인 경우 오버플로가 발생한 경우입니다. 주로 음수가 결과로 나올 때 발생합니다.
2진수 연산에서 자리올림수가 1인데 자리올림수 다음 캐리값이 0인 경우 언더플로가 발생한 경우입니다. 주로 음수들 중에서도 표현범위를 넘어서는 경우에 발생합니다. (음수와 음수의 덧셈)