Comment est-débordement détecté en complément à deux?

Je vois bien que quand je soustrais positives et négatives du numéro à l'aide two's complement - je obtenir les débordements. Par exemple, si je soustrais 1 de 2 j'obtiens:

2 = 0010
1 = 0001 -> -1 = 1111
2 + (-1) -> 0010 + 1111 = 10001

Voici donc le résultat de la cinquième à gauche peu 10001 - est-ce débordement?
J'ai trouvé ces règles pour détecté les débordements avec en complément à deux:

Si la somme de deux nombres positifs donne un résultat négatif, la somme
a débordé. Si la somme de deux nombres négatifs donne un positif
résultat, la somme a débordé. Sinon, la somme n'a pas débordé.

Quelqu'un peut-il donner des précisions sur ces et de montrer l'exemple?

Votre dernier exemple est incohérent. La valeur de -1 est donné dans quatre bits, mais votre réponse est calculé en cinq bits. Si vous la taille de mot est de 5 bits, alors la valeur de -1 devrait être 11111, pas 1111. Dans les 5 bits de mots, 1111 est la valeur 15, pas -1. Vous avez calculé 2 + 15 = -15. Aussi, quelle est votre question de programmation? (Ce n'est pas vraiment une question de programmation).
Désolé, je ne comprends pas. Je me suis converti -1 à quatre bits, et ensuite ajouté et a reçu cinq bits. Comment dois-je pu faire autrement?
Vous avez ajouté deux signé 4-valeurs des bits et produit de 5 bits résultat, ce qui invalide le calcul initial de la 4-bits. C'est comme montrer à quelqu'un un 1 litre seau et de leur dire, "Remplir de tous, mais 5ml." Ils ont mis 995ml. Vous avez un autre seau avec 10 ml d'eau. Vous versez-les dans un seau de 10 litres et dire "Hey, les 10 litres seau n'a pas de débordement. Que personne mis le mauvais quantité d'eau dans l'1 litre seau, parce que je m'attendais à débordement par 5ml!"
ok, pouvez-vous s'il vous plaît me montrer comment faire 2-1 à l'aide de quatre bits?
Vous devez inspecter le signe bits, et la combinaison de bit de signe et s'il y a réaliser vous indique s'il y a dépassement de capacité. Voir ici pour des exemples. Dans votre exemple, le résultat est 0001 avec carry 1

OriginalL'auteur Max Koretskyi aka Wizard | 2015-09-27