2014-03-28 4 views
2

부호가있는 2 진수를 2의 보수 메소드로 추가하면 MSB (부호) 로의 carry와 carry out이 동일하지 않은 경우 왜 자동으로 오버 플로우가 발생 했습니까?2의 보수가 carry로 오버플로를 감지합니다.

+0

나는 이것이 내가 합류 한 이후로 내가 가장 즐거워했던 질문이다. 죄송합니다. 누군가가 대답하기까지 오랜 시간이 걸렸습니다. – GabrielOshiro

답변

0

한 가지 사실을 알아 봅시다.

음수와 양수 피연산자를 추가하면 결과는 항상 표현의 범위에있게됩니다. 오버플로는 동일한 부호 (양수 또는 음수 모두)가있는 두 개의 숫자를 더할 때 결과가 반대 부호를 가질 때 발생합니다.

숫자를 2의 보수로 더할 때 첫 번째 피연산자의 부호 비트와 두 번째 피연산자의 부호 비트를 더합니다. 우리가 긍정적 인 + 긍정적 인 피연산자를 추가 할 때


, 부호 비트의 합은 무슨 문제가되지 않는다는 것을 의미한다 0

0XXX (positive) 
+ 0XXX (positive) 
------ 
    0XXX (positive) 

가, 캐리 아웃이 없을 것입니다 양수 + 양수 피연산자를 추가 할 때.

따라서 캐리 온은 기내 비트 1 결과의 부호가 될 부호 비트

1 
    0XXX (positive) 
+ 0XXX (positive) 
------ 
    1XXX (negative) 

에 존재하는 경우. 즉, 두 개의 양수 피연산자를 추가하고 그 결과 음수를 얻었습니다.

캐리 아웃 = 0
기호 기내에 비트 = 1 개
용량 초과!


우리 네거티브 + 제외 피연산자를 추가 부호 비트의 합은 반출과 0이다. 부정적인 + 부정적인 피연산자를 추가 할 때 그런 일이 중요하지 않음을 의미

1XXX (negative) 
+ 1XXX (negative) 
------ 
10XXX (positive) 

는 항상 캐리 아웃이있을 것이다. "default"를 사용하면 결과는 양수가됩니다. 결과를 피연산자의 동일한 부호로 조정하기 위해 계속 수행해야합니다. 부호 비트로 기동되면 음수 결과가있는 두 개의 피연산자가 생깁니다.

그래서, 기내 비트 0 결과의 부호가 될 부호 비트

0 
    1XXX (negative) 
+ 1XXX (negative) 
------ 
10XXX (positive) 

에 더 반입 가없는 경우. 즉, 두 개의 음수 피연산자를 추가했고 그 결과 양수를 얻었습니다.

캐리 아웃 = 1
기호 기내에 비트 = 0
용량 초과!