EXTRACTION DE BITS D'UN NOMBRE ENTIER SIGNÉ : -32767 À +32768

cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008 - 6 janv. 2008 à 11:54
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 6 janv. 2008 à 17:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45320-extraction-de-bits-d-un-nombre-entier-signe-32767-a-32768

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 janv. 2008 à 17:09
salut,

avec le nombre de sources existante c'est une aberration de voir un tel code
de plus tu dis nombre signé mais as-tu seulement essayé avec un nombre négatif?!

voici une manière d'optimiser un peu....

MsgBox Format$(ConvertBase10ToBase2(666), "0000000000000000")

Function ConvertBase10ToBase2(ByVal Value As Long) As String
Dim lQuotien As Long, lRest As Long

' valeur positive
ConvertBase10ToBase2 = vbNullString
Value = Abs(Value)

' crée la chaîne
Do
lQuotien = Value \ 2
lRest = Value - (lQuotien * 2)
ConvertBase10ToBase2 = CStr(lRest) & ConvertBase10ToBase2
Value = lQuotien
Loop Until lQuotien = 0
End Function

pas besoin de plus :)
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
6 janv. 2008 à 16:53
Bonjour,

Micropic, je pense que tu pousses un peu... Windob a fait un commentaire plutôt très constructif pour tu t'améliores. Ensuite, c'est à toi de voir et d'améliorer la source dans la mesure de tes moyens. Sur le forum, sans nul doute, on te renverrait voir le réglement, pour ne pas dire dans tes cordes... J'ajoute qu'un tout petit peu d'effort, te permettrais déjà te trouver de nombreuses sources plus ou moins identiques traitant du sujet. Si tu analyses un peu les codes proposés, tu auras donc des exemples à te mettre sous la dent, qui t'éviterais d'écrire en présentation : "Il y a un petit bug, à vous de proposer des solutions."... car tu trouveras surement le moyen d'éviter le bug, sur un code simple... ET pour clore, même si je vais devenir plus royaliste que le roi, dire sur un ton aussi directe "à vous de proposer des solutions", ne donne pas envie. Ce n'est pas aux personnes qui viennent voir ta source, de corriger ton code ! mais à toi. Une formulation plus courtoise aurait été bienvenue...

Amicalement,
Us.
micropic Messages postés 2 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 6 janvier 2008
6 janv. 2008 à 16:17
Merci pour ce gentil commentaire...
J'attends plutôt des exemples constructifs...

Fabian.
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
6 janv. 2008 à 11:54
Aie Aie Aie, J'ai meme pas envie de testert quand je vois le code ...

Premiere remarque, une fonction qui utilise 16 arguments pour 16 bits !!
Dans ce cas la, au lieu de passer les elements du tableau de resultats un par un, pourquoi ne pas passer tout le tableau en un seul argument !

Ensuite, meme remarque pour la structure conditionnelle : Utiliser un If ... ElseIF ... 15 fois pour tester chaque bit un par un !! Il faudrait mieux faire une boucle sur les elements de l'unique tableau passé en parametre (remarque précédente) et tester a chaque fois.

Pour finir, en général pour une conversion Int -> Binary, on ne compare pas le nombre aux puissances de 2 successives car c'est un peu lourd et plus logique que mathématique (donc globalement moins rapide), on utilise plutot une division par 2 avec reste.
Rejoignez-nous