binaire complément à 1

Aide à la résolution d'exercices ou devoirs en automatisme industriel, electrotechnique, régulation, electronique.
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Inscription : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Re: binaire complément à 1

Message par Kallysto »

kadauto a écrit : 28 août 2020, 11:53 1°) En binaire signé:
11010 = (-)11010 ou bien (-)1010 ?
C'est -1010.
Le premier bit indique le signe en "signé". d'où le fait que la capacité de comptage soit divisée par 2 quand on est en signé :

Si on a 8 bits :
En non signé :
Numéro du bitBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
Valeur1286432168421
Donc : 1111 1111 = 255 / 0000 0000 = 0 / 0111 1111 = 127
Amplitude : de 0 à 255

En signé :
Numéro du bitBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
Valeur- 6432168421
Donc : 1111 1111 = -127 / 0000 0000 = 0 / 0111 1111 = 127
Amplitude : de -127 à 127.

[EDIT de Brebiou] Mise en forme tableau
Avatar de l’utilisateur
djé
Dieu du process
Dieu du process
Messages : 776
Inscription : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: binaire complément à 1

Message par djé »

Kallysto a écrit : 28 août 2020, 14:01
kadauto a écrit : 28 août 2020, 11:53 1°) En binaire signé:
11010 = (-)11010 ou bien (-)1010 ?
C'est -1010.
Le premier bit indique le signe en "signé". d'où le fait que la capacité de comptage soit divisée par 2 quand on est en signé :

Si on a 8 bits :
En non signé :

Numéro du bit | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Valeur | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |

Donc : 1111 1111 = 255 / 0000 0000 = 0 / 0111 1111 = 127
Amplitude : de 0 à 255

En signé :

Numéro du bit | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Valeur | - | 64 | 32 | 16 | 8 | 4 | 2 | 1 |

Donc : 1111 1111 = -127 / 0000 0000 = 0 / 0111 1111 = 127
Amplitude : de -127 à 127.
Non!
Amplitude de - 128 à 127 et 1111 1111 = -1!
1000 0000 = -128
Le codage binaire des nombres signés utilise le complément à 2.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: binaire complément à 1

Message par itasoft »

slts,
il faut se mettre d'accord sur le nombre de bits du format (base), je partais sur un format à 16 bits significatifs ou non
Automaticien privé (de tout)
itasoft@free.fr
kadauto
Code sa première boucle
Code sa première boucle
Messages : 15
Inscription : 27 août 2020, 11:46

Re: binaire complément à 1

Message par kadauto »

Voici ce que j'ai trouvé sur internet:
Le complément à 2 est très utile pour trouver la valeur d'un binaire, mais j'ai pensé à un moyen beaucoup plus concis de résoudre un tel problème (je n'ai jamais vu personne le publier):
prenons un binaire, par exemple: 1101 qui est [en supposant que l'espace "1" est le signe] égal à -3 .
en utilisant le complément à 2, nous ferions ceci ... retourner 1101 à 0010 ... ajouter 0001 + 0010 ===> nous donne 0011. 0011 en binaire positif = 3. donc 1101 = -3 !
Ce que j'ai réalisé:
au lieu de tout renverser et ajouter, vous pouvez simplement faire la méthode de base pour résoudre un binaire positif (disons 0101) est (23 * 0) + (22 * 1) + (21 * 0) + (2 * 1) = 5.
Faites exactement le même concept avec un négatif! (Avec une petite torsion)
prenez 1101, par exemple:
pour le premier numéro au lieu de 23 * 1 = 8 , do - (23 * 1) = -8 .
puis continuez comme d'habitude en faisant -8 + (22 * 1) + (21 * 0) + (2 * 1) = -3
1°)Qu’en pensez-vous ?
2°) Personnellement j’ai fait l’opération suivante avec cette méthode:
1010- (1100)=1*2+1*^3 + (-1*2^3+1*2^2)=10-8+4=-2
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: binaire complément à 1

Message par Bruce33 »

kadauto a écrit : 30 août 2020, 18:55 Qu’en pensez-vous ?
Oui cela fonctionne. Cette personne compte à partir de la valeur négative la plus petite.
On le comprend bien en observant le tableau des valeurs signées (sur 4 bits comme l'exemple donné) :
0 1 1 1 = 7
0 1 1 0 = 6
0 1 0 1 = 5
0 1 0 0 = 4
0 0 1 1 = 3
0 0 1 0 = 2
0 0 0 1 = 1
0 0 0 0 = 0
1 1 1 1 = -1
1 1 1 0 = -2
1 1 0 1 = -3
1 1 0 0 = -4
1 0 1 1 = -5
1 0 1 0 = -6
1 0 0 1 = -7
1 0 0 0 = -8

Cette technique est intéressante si l'on veut calculer de tête une valeur binaire négative avec peu de 1. Et c'est tout.
Dernière modification par Bruce33 le 30 août 2020, 22:48, modifié 3 fois.
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: binaire complément à 1

Message par Bruce33 »

kadauto a écrit : 30 août 2020, 18:55 Personnellement j’ai fait l’opération suivante avec cette méthode:
1010- (1100)=1*2+1*^3 + (-1*2^3+1*2^2)=10-8+4=-2
Ah, mais faut pas tout mélanger !
Vous avez écrit : 10-8+4=-2 ... Si vous regardez bien vous verrez que c'est faux !
Vous mélangez soustraction et nombre négatif. La technique expliquée plus haut ne sert pas à calculer une soustraction mais à retrouver la valeur décimale d'un nombre binaire négatif.
Votre soustraction devient l'addition de 1010 vu comme un nombre positif (4 bits non signés) et de 1100 vu comme un nombre négatif (4 bits signés)... ce n'est pas cohérent !
kadauto
Code sa première boucle
Code sa première boucle
Messages : 15
Inscription : 27 août 2020, 11:46

Re: binaire complément à 1

Message par kadauto »

Ah, mais faut pas tout mélanger !
Vous avez écrit : 10-8+4=-2 ... Si vous regardez bien vous verrez que c'est faux !
Bien sûr ça donne 6 ce qui est faux !
Il faut mieux passer par le complément à 2 pour une soustraction.

Question:
Je me perds un peu dans les binaires non signés et signés !
Etant donner un binaire non signé, le complémenter à 2 ça a un sens ?
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: binaire complément à 1

Message par Bruce33 »

Le complément à 2 n'est pas une méthode de calcul pour les soustractions !

Le complément à 2 est une opération logique composée de 2 étapes :
- l'inversion des bits,
- l'ajout de 1.

Par convention les nombres négatifs sont représentés par un bit de signe + le complément à 2 de la valeur absolue.
La raison de ce choix c'est qu'avec un circuit logique (dans le domaine de l'électronique) l'inversion des bits et l'ajout de 1 c'est facile à réaliser. Et surtout, en ajoutant (en binaire) des nombres positifs et des nombres négatifs, le mode de représentation est conservé sur le résultat (bit de signe et complément à 2 pour les nombres négatifs). C'est donc "facile" à traiter avec des composants électroniques (il faut penser aux débuts de l'électronique) donc économe en argent et en temps de traitement.

Enfin il faut déterminer si on utilise des valeurs signées ou non, et avec quel nombre de bits. C'est pour cela qu'il existe en informatique et en automatisme des types de variables : BYTE, INT, UINT, DINT... (Les termes dépendent du langage utilisé.)
Quand on programme, la saisie d'une valeur entière (-15 par exemple) est automatiquement convertie par l'ordinateur ou l'automate en valeur binaire signée correspondant au type défini (INT, DINT...) On n'a donc, en général, pas besoin de se soucier du codage binaire.

Mais bien connaître le codage binaire permet de comprendre les limites de son utilisation.
kadauto
Code sa première boucle
Code sa première boucle
Messages : 15
Inscription : 27 août 2020, 11:46

Re: binaire complément à 1

Message par kadauto »

Le complément à 2 n'est pas une méthode de calcul pour les soustractions !
J'ai toujours lu que les soustractions à l'aide du compléments à 2 sont plus facile que les soustractions bit à bit.
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: binaire complément à 1

Message par Bruce33 »

Le complément à 2 ne réalise pas la soustraction à lui tout seul, c'est ce que j'ai voulu dire.
Mais il permet de passer par une addition au lieu d'une soustraction.
Les exemples de calcul avec cette technique qu'on trouve sur Internet expliquent rarement (ou mal) pourquoi cela fonctionne.

Voici un peu de théorie. :ugeek:
Un nombre binaire composé de n bits peut prendre 2n valeurs, allant de 0 (valeur mini) à 2n-1 (valeur maxi).
A ce stade on oublie l'histoire du bit de signe, on travaille uniquement avec des valeurs absolues.
Lorsqu'on fait le complément d'un nombre binaire a , on obtient la valeur maxi - a c'est-à-dire 2n- 1 - a .
Avec le complément à 2, comme on ajoute 1, on obtient donc 2n - a . En notant a' le complément à 2 de a , on a alors a' = 2n - a .
Pour passer d'une soustraction b - a à une addition, on pose b - a = b - 2n + 2n - a = b - 2n + a' .
Donc réaliser la soustraction b - a équivaut à additionner b + a' et soustraire le bit 2n.

exemple de calcul binaire
1001 - 11
= 1001 - 0011* on aligne le nombre de bits du plus petit nombre sur celui du plus grand (soit 4 bits) avant de réaliser le complément
= 1001 + 1100 + 1 - 10000* le complément de 0011 est 1100, on ajoute 1 pour obtenir le complément à 2, et on soustrait le bit qui vaut 24
= 10110 - 10000* soustraire le bit valant 24 revient donc à le supprimer pour revenir à une valeur sur 4 bits.
= 0110* en supprimant le 0 non significatif, on obtient donc 110
De nombreux exemples sur Internet "cachent" la valeur 2n à soustraire jusqu'à la dernière étape du calcul, où on dit qu'il faut "ignorer" la retenue, comme par magie.
kadauto a écrit : 03 sept. 2020, 18:46 J'ai toujours lu que les soustractions à l'aide du compléments à 2 sont plus facile que les soustractions bit à bit.
Je ne trouve pas plus difficile de poser une soustraction binaire que de faire un complément à 2 suivi d'une addition.
Effectivement, en fonction des valeurs utilisées et de la maîtrise que l'on a des techniques de calcul, la méthode la plus rapide ne sera pas toujours la même.
Quand on calcule par exemple 1010 - 10 = 1000, la soustraction se fait naturellement (de tête) sans nécessité d'utiliser le complément à 2.
Répondre