Débordement d'entiers sans signe sur 8 |
Sujet: Débordement d'entiers sans signe sur 8 par Xevel sur 26/6/2007 12:54:13 Bonjour, Je débute en Windev, et je dois réaliser un bout de code permettant de créer un identifiant à partir de certaines données. Cet identifiant fait 64 bits, chaque bit ou groupe de bits (de différentes longueurs) a sa propre signification. J'ai donc opté pour un entier sans signe sur 8 pour construire mon identifiant, et je procède en ajoutant la valeur du champs puis en décalant a gauche d'autant de bits que nécessaire, et je réitère. Ex bidon : Pour obtenir 100101 (binaire), qui représente (en partant de la gauche) 2 bits pour le numero de version, 1 bit pour le type et 3 bits pour l'identifiant, je fais : version est un entier = 2 type est un entier = 0 id est un entier = 5 x = version x = decalage_gauche(x,1) + type x = decalage_gauche(x,3) + id La fonction decalage_gauche(x,n) prends x, le multiplie n fois par 2 et renvoi le resultat. Problème : pour mon identifiant 64bits, tout se passe bien jusqu'a la derniere etape, lorsque je fais le dernier décalage et que j'ajoute le nombre qui donnera les bits de poids faible. Le décalage se passe sans problèmes mais apres je ne peux plus ajouter au resultat quoi que ce soit, sous peine de l'erreur suivante :
et voici la procédure en question :
A noter : la ligne suivant celle posant problème dans l'exemple fait la même erreur : ajouter 1 ou enlever 1 a nRes n'est plus possible... la seconde ligne commentée fait exactement le calcul que la ligne 39 tente de faire (pour des valeurs données des paramètres), mais ne pose pas de problème... Les valeurs des paramètres ne dépassent pas les valeurs admissibles (par exemple nRemplacement ne pourra jamais dépasser 7, donc n'occupera jamais plus de 3 bits. Je commence à me demander si WinDev ne fait pas les évaluations des membres droit des affectations obligatoirement dans un entier signé... :/ Voila si vous avez lu jusqu'ici, merci et j'espère que vous pourrez m'aider... ^^ |