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
Désolé, je ne comprends pas. Je me suis converti
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
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
-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
Vous devez vous connecter pour publier un commentaire.
Commençons par la réponse à votre question titre.
Mais vous demandez quelque chose de différent sur le corps de votre question après votre exemple.
Pas! il n'y a aucun débordement ici. Le cinquième bit est la transporter ou de les emprunter. Si vous parlez plus. Emprunter si vous parlez de la soustraction.
Dépassement de capacité se produit lorsque le numéro que vous essayez de représenter est hors de la plage de numéros peut être représenté. Dans votre exemple, vous êtes à l'aide de 4 bits en complément à deux, cela signifie que vous pouvez représenter n'importe quel nombre dans la plage de
-8
(1000
) jusqu'à+7
(0111
). Le résultat de votre soustraction2-1
est+1
, un nombre qui se situe dans la plage de représentation.Lorsque nous ajoutons un négatif et un positif opérande, le résultat sera toujours dans la plage de représentation. Des débordements se produisent quand on ajoute deux nombres avec le même signe (positives ou négatives), et le résultat a le signe opposé.
La plupart des malentendus entourant effectuer de dépassement et vient du fait que nous utilisons le mener comme un des paramètres pour générer de l'indicateur de débordement. Ils sont fortement liés, mais ils ne sont pas la même chose.
Lors de l'ajout de nombres en complément à deux, si le transporter et de le transporter dans le most significant bit (bit de signe) sont différentes, ce qui signifie un dépassement a eu lieu.
Voyons deux opérandes avec un résultat positif:
Le réaliser est de 1 et le report de bit de signe (MSB) est 0.
Et maintenant, un exemple de deux opérandes avec un résultat négatif.
Le réaliser est de 0 et le report de bit de signe (MSB) est de 1.
carry flag
etoverflow flag
et de revenir avec des questions)OriginalL'auteur GabrielOshiro
@GabrielOshiro réponse est vraiment bon. Je veux juste ajouter un peu de logique ici. Lorsque vous ajoutez 2 et -1,
Vous devez séparer le bit le plus significatif dans le nombre négatif du reste de l'bits, puisque, en complément à deux que le bit apporte une valeur négative. Donc, si vous devez d'abord ajouter tout le reste en premier:
Après cela, nous pouvons voir clairement que le cinquième bit dans "10001" est causée par l'ajout de la "1" nous avons quitté plus tôt (au quatrième bit) avec 1001, produisant un report dans le cinquième bit. Cependant, depuis cette "1" devrait vraiment annuler avec les 1001, laissez-nous avec 0001, nous pouvons ignorer le bit supplémentaire dans "10001" ici.
Plus en profondeur raisonnement serait d'examiner lors de la nous pouvons ignorer ce bit supplémentaire et quand nous ne le pouvons pas. @GabrielOshiro mentionné, lorsque le report de et les bagages dans les plus significatives sont différents, nous ne pouvons l'ignorer. Dans un bagage 2 unités de nombres négatifs sont perdues, car il n'y a pas d'espace pour tenir le bit supplémentaire, et dans un bagage dans deux unités de nombres positifs sont perdus, car ce qui est censé être une unité de nombre positif est considéré comme une unité de négatif, au lieu. Ici 1 - (-1) = 2. Par conséquent, une cabine et un report s'annuler les uns les autres. Mais quand un seul d'entre eux se produit, le résultat sera faux ainsi, nous avons un dépassement de capacité.
OriginalL'auteur endurancist