Division binaire
Résolu/Fermé
lina2126
Messages postés
95
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
7 avril 2010
-
19 janv. 2008 à 15:42
Amine morroco - 23 oct. 2017 à 22:19
Amine morroco - 23 oct. 2017 à 22:19
A voir également:
- Division euclidienne binaire
- Codage binaire - Guide
- Division euclidienne ti 83 - Forum calculatrices
- Alphabet binaire ✓ - Forum Programmation
- Pour participer à un jeu, josé doit donner un nom de code à chacun des membres de son équipe. il veut utiliser le code binaire. il essaie avec seulement 3 bits. mais cela ne suffit pas. combien de membres n'auront pas de code ? ✓ - Forum Powerpoint
- Réponse binaire - Forum Bases de données
7 réponses
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 janv. 2008 à 17:13
19 janv. 2008 à 17:13
Bonjour,
La division en binaire marche comme dans toute autre base y compris la base 10. Effectivement ça ne parait pas immédiat.
Il y a un petit exemple animé là: (2ème section)
Exemple
Le principe général est le suivant (Il me semble que tu aies un cas spécifique vu les termes employés, je garderai les miens tels que:
Dividende = Diviseur * quotient + reste, soit pour 25 / 4 : 25 = 4 * 6 + 1)
En binaire:
25 = (11001)2
4 = (100)2
On prend le nombre de chiffre nécessaire pour la première division
Naturellement on pose un 1 en quotient puis on fait la soustraction 110 - (1* 100)
ce qui donne
(J'expliquerai plus bas comment je fait mes soustractions vu que je n'ai jamais su faire faire la méthode normale/humaine, ce cas est naturel)
On abaisse un chiffre, ici un zéro
et on recommence tant que tous les chiffres n'ont pas étés abaissés
on fait la soustraction
on abaisse le chiffre suivant
celui ci "y va" zéro fois, on pose un zéro dans le quotient et on abaisse le chiffre suivant (mais il n'y en a plus donc c'est fini)
on trouve bien 11001 = 100 * 110 + 1
/!\ Il me semble bien que la division binaire applicable au nombres est différente de la division utilisée dans les calcul de CRC par exemple. Dans les division des calculs de CRC telle celle fournie dans le lien de lami20j, la soustraction est faite sans retenue (soit équivalente à un xor) et nécessite un ajouts de plusieurs zéro au dividende. (Je ne sais lus comment est déterminé ce nombre de zéro par contre)
---------------------------------------------------------------------------
Je mets ici comment je fais mes soustractions (oubliant tout le temps cette stupide table...)
par exemple (tout à fait au hasard) : 11111 - 10011 L'exemple est bête et immédiat mais bon...
11111 - 10011 = 01100
Je prend le nombre à soustraire 10011 et je prends son complément à 2.
(Dans toute base B on considère généralement les opérations complément à B et le complément à B-1)
Le complémentaire à 9 dans la base 10 de 4 est 5 ( 9 - 4 = 5 )
Le complémentaire à 10 dans la base 10 de 4 est : Le complémentaire à 9, plus 1. Soit (9 - 4 + 1 = 6)
(Le complément est l'opération et le complémentaire son résultat)
Pour les nombres plus grands (Attention au nombre de chiffres considérés !!!)
C10( 12345 ) = C9( 12345 ) + 1 = 87654 + 1 = 87655
Voilà l'erreur commune:
C10( 00012345 ) = C9( 00012345 ) + 1 = 99987654 + 1 = 99987655
Il faut impérativement savoir le nombre de chiffre sur lequel on fait l'opération car les 0 implicites sont à prendre en compte!
Bon, pourquoi tout ça ?
Parce qu'en informatique les choses sont jolies et : A - B = A + C2( 2 )
en reprenant notre exemple du début:
11111 - 10011 = 11111 + C2( 10011 ) = 11111 + 01101 = 01100
En base deux on dit aussi que e complément à 2 d'un nombre s'obtient en inversant tous les chiffres (en partant de la gauche jusqu'au dernier 1 (exclus) à droite) C2( 000110011001100 ) = 111001100110100
Ainsi 11111 - 1 = 11111 + C2( 00001 ) = 11111 + 11111 = 11110 en retirant là encore la retenue finale qui dépasse.
J'utilisais cette méthode dès lors que les nombres m'obligeaient à faire 0 - 1 quelque part, tels
101010 - 010110 = 101010 + C2( 010110 ) = 101010 + 101010 = 010100
Voilà, c'est un peu loin tout ça, j'espère ne pas avoir dit de bourde ^^
M.
Edit. Quelle horreur, il a bouffé tous les espaces et ruiné l'alignement dans les divisions v_v (Grumph)
(Comment ça "grumph est pas dans le dico ?)
La division en binaire marche comme dans toute autre base y compris la base 10. Effectivement ça ne parait pas immédiat.
Il y a un petit exemple animé là: (2ème section)
Exemple
Le principe général est le suivant (Il me semble que tu aies un cas spécifique vu les termes employés, je garderai les miens tels que:
Dividende = Diviseur * quotient + reste, soit pour 25 / 4 : 25 = 4 * 6 + 1)
En binaire:
25 = (11001)2
4 = (100)2
11001 | 100 | ------ |
On prend le nombre de chiffre nécessaire pour la première division
___ 11001 | 100 | ------ |
Naturellement on pose un 1 en quotient puis on fait la soustraction 110 - (1* 100)
___ 11001 | 100 | ------ | 1
ce qui donne
(J'expliquerai plus bas comment je fait mes soustractions vu que je n'ai jamais su faire faire la méthode normale/humaine, ce cas est naturel)
___ 11001 | 100 010 | ------ | 1
On abaisse un chiffre, ici un zéro
11001 | 100 0100 | ------ | 1
et on recommence tant que tous les chiffres n'ont pas étés abaissés
11001 | 100 0100 | ------ | 11
on fait la soustraction
11001 | 100 0100 | ------ 000 | 11
on abaisse le chiffre suivant
11001 | 100 0100 | ------ 0001 | 11
celui ci "y va" zéro fois, on pose un zéro dans le quotient et on abaisse le chiffre suivant (mais il n'y en a plus donc c'est fini)
11001 | 100 0100 | ------ 0001 | 110
on trouve bien 11001 = 100 * 110 + 1
/!\ Il me semble bien que la division binaire applicable au nombres est différente de la division utilisée dans les calcul de CRC par exemple. Dans les division des calculs de CRC telle celle fournie dans le lien de lami20j, la soustraction est faite sans retenue (soit équivalente à un xor) et nécessite un ajouts de plusieurs zéro au dividende. (Je ne sais lus comment est déterminé ce nombre de zéro par contre)
---------------------------------------------------------------------------
Je mets ici comment je fais mes soustractions (oubliant tout le temps cette stupide table...)
par exemple (tout à fait au hasard) : 11111 - 10011 L'exemple est bête et immédiat mais bon...
11111 - 10011 = 01100
Je prend le nombre à soustraire 10011 et je prends son complément à 2.
(Dans toute base B on considère généralement les opérations complément à B et le complément à B-1)
Le complémentaire à 9 dans la base 10 de 4 est 5 ( 9 - 4 = 5 )
Le complémentaire à 10 dans la base 10 de 4 est : Le complémentaire à 9, plus 1. Soit (9 - 4 + 1 = 6)
(Le complément est l'opération et le complémentaire son résultat)
Pour les nombres plus grands (Attention au nombre de chiffres considérés !!!)
C10( 12345 ) = C9( 12345 ) + 1 = 87654 + 1 = 87655
Voilà l'erreur commune:
C10( 00012345 ) = C9( 00012345 ) + 1 = 99987654 + 1 = 99987655
Il faut impérativement savoir le nombre de chiffre sur lequel on fait l'opération car les 0 implicites sont à prendre en compte!
Bon, pourquoi tout ça ?
Parce qu'en informatique les choses sont jolies et : A - B = A + C2( 2 )
en reprenant notre exemple du début:
11111 - 10011 = 11111 + C2( 10011 ) = 11111 + 01101 = 01100
En base deux on dit aussi que e complément à 2 d'un nombre s'obtient en inversant tous les chiffres (en partant de la gauche jusqu'au dernier 1 (exclus) à droite) C2( 000110011001100 ) = 111001100110100
|11111 +|01101 --------- 1|01100Et on retire le 1 généré par la retenu car il dépasse le nombre max de chiffres de nos deux nombres (max aussi considéré pour savoir sur combien de chiffre réaliser le complément à 2)
Ainsi 11111 - 1 = 11111 + C2( 00001 ) = 11111 + 11111 = 11110 en retirant là encore la retenue finale qui dépasse.
J'utilisais cette méthode dès lors que les nombres m'obligeaient à faire 0 - 1 quelque part, tels
101010 - 010110 = 101010 + C2( 010110 ) = 101010 + 101010 = 010100
|101010 +|101010 -------------- 1|010100
Voilà, c'est un peu loin tout ça, j'espère ne pas avoir dit de bourde ^^
M.
Edit. Quelle horreur, il a bouffé tous les espaces et ruiné l'alignement dans les divisions v_v (Grumph)
(Comment ça "grumph est pas dans le dico ?)
19 janv. 2008 à 17:57
En revanche si je peux me permettre, on les utilises en général pour le code et dans ton cas pour les divisions, les explications tu peux les laisser en normal ;-))
9 oct. 2010 à 01:07
tu peux nous donner un autre exemple pour mieux comprendre ??
le cas d'une division binaire un peu long
14 févr. 2016 à 07:29
23 oct. 2017 à 22:19