J'ai juste un doute sur le fonctionnement du complément binaire. Par exemple (en python):
a = 0011 1100 ~a = 1100 0011
Donne une sortie: -
-61
Le complément binaire de 60 est:
a = 60 print(~a)
Ne devrait-il pas être -60
?
Je sais que je me trompe, mais pourquoi il passe à -61
?
3 Réponses :
Vous y êtes presque. 1100 0011
est en fait -61
.
Voici comment un binaire négatif est converti en décimal:
Inverser les bits
Ajoutez 1
Convertir en décimal
Ajouter un signe négatif
Donc:
1100 0011 + 0011 1101 ------------- 1 0000 0000
De wikipedia Page du complément à deux :
Le complément à deux d'un nombre à N bits est défini comme son complément par rapport à 2 ^ N. Par exemple, pour le nombre à trois bits 010, le complément à deux est 110, car 010 + 110 = 1000.
Ici, le complément de 1100 0011
est 0011 1101
cuz
1100 0011 0011 1100 <-- bits inverted 0011 1101 <-- one added 61 <-- converted to decimal -61 <-- added negative sign
~
est un opérateur d'inversion au niveau du bit et il agit exactement comme défini :
L'inversion binaire de x est définie par - (x + 1).
C'est simplement ainsi que fonctionne l'inversion au niveau du bit de la représentation du complément à deux d'un entier.
/ p>
La roue de complément à deux visualise assez bien cela:
Comme vous pouvez le voir, l'inversion bit à bit de 1 est -2, l'inversion bit à 2 est -3, ... et l'inversion bit à 60 sera -61.
Dans tous les ordinateurs modernes, le binaire du complément à 2 est utilisé pour représenter des entiers (et non la représentation binaire classique). Comme confirmé dans la documentation Python :
Le binaire du complément à deux est le même que le binaire classique représentation pour les entiers positifs mais est légèrement différente pour nombres négatifs. Les nombres négatifs sont représentés en exécutant la opération de complément à deux sur leur valeur absolue.
Le complément à 2 d'un nombre négatif, -x, est écrit en utilisant le modèle de bits pour (x-1) avec tous les bits complétés (commutés de 1 à 0 ou de 0 à 1). p>
Exemple: Complément 2 de -15:
print(~60) # Outputs -61 print(~-60) # Outputs 59
L'opérateur ~ (PAS au niveau du bit) de Python renvoie le complément 1 du nombre.
Exemple: strong>
print(~14) # Outputs -15
14 est (1110) sous la forme binaire de son complément à 2.
Ici, ~ 14 inverserait (c'est-à-dire le complément à 1) tous les bits sous cette forme à 0001. Cependant, 0001 est en fait le complément à 2 de -15.
Une règle simple pour se souvenir de l'opération NOT au niveau du bit sur les entiers est - (x + 1).
-15 => complement(x-1) => complement(15-1) => complement(14) => complement(1110) => 0001