Je sais que cela a quelque chose à voir avec le complément de 2 et l'ajout de 1, mais je ne comprends pas vraiment comment vous pouvez coder un nombre de plus avec la même quantité de bits lorsqu'il s'agit de nombres négatifs.
Je sais que cela a quelque chose à voir avec le complément de 2 et l'ajout de 1, mais je ne comprends pas vraiment comment vous pouvez coder un nombre de plus avec la même quantité de bits lorsqu'il s'agit de nombres négatifs.
Réponses:
Pensez-y en ces termes. Prenez un nombre de 2 bits avec un signe précédent:
000 = 0
001 = 1
010 = 2
011 = 3
Ayons maintenant quelques points négatifs:
111 = -1
110 = -2
101 = -3
Attendez, nous avons aussi
100 ...
Il doit être négatif, car le bit de signe est 1. Donc, logiquement, il doit être -4.
(Edit: Comme WorldEngineer le fait remarquer à juste titre , tous les systèmes de numérotation ne fonctionnent pas de cette façon - mais ceux que vous demandez fonctionnent.)
Parce qu'il n'y a pas deux classes de nombres dans la plage entière, mais trois: les nombres négatifs, zéro et les nombres positifs. Zéro doit occuper un slot (il serait plutôt peu pratique de ne pas pouvoir représenter zéro ...), donc la classe positive ou négative doit abandonner un slot. Le fait que c'est généralement la plage positive qui doit faire ce sacrifice est dans une certaine mesure arbitraire, mais au niveau des manipulations de bits, il y a certaines choses que cette décision rend plus commode.
Il existe essentiellement trois façons de représenter des entiers signés en binaire: complément à 2, complément à 1 et amplitude du signe. (Biquinary a suivi le chemin du Dodo Bird il y a longtemps.)
Le complément et l'amplitude du signe de 1 ont deux valeurs nulles, +0 et -0, chacune avec une représentation unique. Le complément de 2 n'a qu'une seule valeur zéro et une seule représentation.
Maintenant, un champ de N bits peut coder 2 ^ N valeurs. Soustrayez un complément à 2, et vous avez 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Puisque la représentation pour zéro est tous les bits zéro, et un signe + est zéro, il y aura une autre représentation non nulle possible avec le bit de signe mis à 1.
C'est une façon très longue de dire que le complément à 2 représente des valeurs dans la plage - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
Le complément 1 a en fait un avantage sur le complément 2 si vous effectuez des calculs de traitement de signaux numériques entiers. Les opérations complémentaires de 1 sont intrinsèquement tronquées vers zéro. Le complément de 2 tronque vers l'infini. J'ai appris celui-ci à la dure ...