Comment faire une division par 2 en chiffre binaire signé (représentation binaire redondante)? Le décalage ne fonctionnera pas correctement?division par 2 en chiffre binaire signé (représentation binaire redondante)
Répondre
Une représentation binaire redondant est juste une expression de la forme:
\sum_{i=0}^n d_i 2^n
où les s d_i
de » sont tirés d'un ensemble plus vaste qu'une simple {0,1}
.
divisant par deux ou décalage prend à droite que
\sum_{i=0}^{n-1} d_{i+1} 2^n + f(d_0)
L'astuce est dans la façon de traiter avec ajustement pour la représentation redondante pour d_0
.
Si votre RBR a chiffres du formulaire {0,1,2}
et a un 2 pour le chiffre le moins significatif, vous devrez alors ajouter 1
au résultat pour compenser, si f(0) = 0
, f(1) = 0
, f(2) = 1
devrait fonctionner.
4 = 12_base2
, donc12_base2 >> 1
=1 + f(2)
=1 + 1
=2_base2
=2
comme prévu.6 = 102_base2
, donc102_base2 >> 1
=10_base2 + f(2)
=11_base2
=3
Vous pouvez obtenir quelque chose de similaire pour en définissant f(-1) = -1
représentations binaires signées redondantes (à savoir avec d_i
en {-1,0,1}
).
1 = 1(-1)_base2
, donc1(-1)_base2 >> 1
=1 + f(-1)
=1 - 1
=0
En fin de compte l'approche naïve du simple déplacement fonctionne, il faut juste un facteur fudge pour tenir compte de tout codage redondant des chiffres décalés.
Si votre RBR choisi comprend plus d'options, vous devrez ajuster le facteur de fudge en conséquence.
Quelle est votre architecture cible? ASIC? FPGA? Pouvez-vous utiliser un logiciel? Vous devriez également nous en dire plus sur votre RBR * spécifique *. –