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

Messages postés
225
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
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
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29 -
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
8 -
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
-
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
-
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.