cs_Manu93
Messages postés19Date d'inscriptionlundi 3 juin 2002StatutMembreDernière intervention26 mai 2003
-
5 juin 2002 à 03:27
cs_Manu93
Messages postés19Date d'inscriptionlundi 3 juin 2002StatutMembreDernière intervention26 mai 2003
-
5 juin 2002 à 13:57
Comment faire un division binaire sous Delphi
sans convertir en hexa ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 5 juin 2002 à 06:32
Pour les décalages de bits, il y a les opérateurs SHL pour celà;
Exemple, pour multiplier 10 par deux :
10 SHL 1;
C'est à dire décaler les bits d'un rang vers la gauche;
Pour diviser par deux (ce qui revient à utiliser l'opérateur DIV) :
10 SHR 1;
est strictement équivalent à 10 DIV 2.
Extrait de l'aide en ligne de Delphi :
"Les opérations x shl y et x shr y décalent la valeur x vers la gauche ou vers la droite de y bits, ce qui revient à multiplier ou à diviser x par 2^y ; le résultat est du même type que x. Si, par exemple, N contient la valeur 01101 (13 en décimal), alors N shl 1 renvoie 11010 (26 en décimal)."
Il faut donc faire très attention au risque de bug comme par exemple dans :
Maxint shl 1;
Quel est le résultat à ton avis ?
La réponse est la suivante :
ShowMessage(IntToStr(Maxint shl 1));
cs_Manu93
Messages postés19Date d'inscriptionlundi 3 juin 2002StatutMembreDernière intervention26 mai 2003 5 juin 2002 à 13:57
OKay pour SHR et SHL, pas de problemes
Mais cela ne permet pas de faire par exemple :
10100000 / 1001
Pas de decalage possible ?
Je recherche a avoir les calculs intermediaires
Exactement comme si je le faisait a la main.
10100000 |1001
1001 |10001
------ |
00010000 |
1001 |
------- |
0111