Maison  >  Article  >  développement back-end  >  Système de nombres binaires - Débordement d'addition arithmétique en C/C++ ?

Système de nombres binaires - Débordement d'addition arithmétique en C/C++ ?

PHPz
PHPzavant
2023-08-26 22:33:011023parcourir

Le système de nombres complémentaires de

2 est largement utilisé dans l’architecture informatique.

Le système numérique complémentaire du N-bit 2 peut représenter des nombres de -2n-1 à 2n-1-1

4 chiffres peuvent représenter des nombres de (-8 à 7)

5 chiffres peuvent représenter des nombres de (-16 à 15) Les nombres sont dans le système du complément à 2.

Un débordement se produit en outre lorsque 2 nombres complémentaires de N bits 2 sont ajoutés et que la réponse est trop grande pour tenir dans ce groupe de N bits.

Les ordinateurs contiennent des registres fixes de N bits. Le résultat de l’addition de deux nombres à N chiffres sera le plus grand nombre à N+1 chiffres.

Carry Flag stocke des bits supplémentaires. Mais un report n’indique pas toujours un débordement.

Détection de débordement

Quand -

  • le résultat de l'ajout de deux nombres négatifs est positif ou

  • le résultat de l'ajout de deux nombres négatifs est négatif.

Par conséquent, un débordement peut être détecté en vérifiant le bit le plus significatif (MSB) des deux opérandes et le résultat. Cependant, au lieu d'implémenter un comparateur 3 bits, un débordement peut être détecté en vérifiant la sortie de retenue et de retenue du MSB. Nous considérons l’addition sur N bits de nombres complémentaires à 2.

二进制数系统 - C/C++中的算术加法溢出?

Un débordement se produit lorsque l'entrée de report n'est pas égale à la sortie de report. L’expression de débordement ci-dessus peut être discutée à partir de l’analyse suivante.

二进制数系统 - C/C++中的算术加法溢出?

Dans la première image, les bits les plus significatifs des deux nombres sont 0, ce qui indique qu'il s'agit de nombres positifs. Ici, si l'entrée de report est 1, nous obtenons que le bit le plus significatif du résultat soit 1, indiquant que le résultat est négatif (débordement) et que la sortie de report est 0. Le report n'est pas égal à effectuer, donc un débordement se produit.

Dans la deuxième image, les bits les plus significatifs des deux nombres sont 1, ce qui indique qu'il s'agit de nombres négatifs. Ici, si l'entrée de report est 0, nous obtenons que le bit le plus significatif du résultat soit 0, indiquant que le résultat est positif (débordement), et la sortie de report est 1. Le report n'est pas égal à effectuer, donc un débordement se produit.

Les reports en entrée et en sortie de MSB suffisent donc à détecter les débordements.

二进制数系统 - C/C++中的算术加法溢出?

La porte XOR ci-dessus peut être utilisée pour détecter un débordement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer