Retrouver les nombres qui composent un chiffre en binaire. - Algo - Programmation
Marsh Posté le 06-01-2011 à 12:25:38
Bonjour,
Citation : connaitre les nombres decimales qui composent un binaire |
Désolé, mais je ne comprends pas bien :
- Les "nombres" ou les "chiffres" ?
- Les "nombres décimales" ou les "nombres décimaux", ou la "partie décimale d'un nombre décimal" ?
- Un "binaire" ? Ce mot peut avoir plusieurs significations. Par exemple, il peut désigner un programme. Mais ici, je devine qu'il s'agit d'un "nombre écrit en notation binaire" ou plutôt d'une chaîne de caractères composées des caractères "0" et 1".
Citation : 1011 c'est 8+2+1 |
Désolé, je ne comprends pas bien :
- L'expression "c'est" n'est pas claire.
Est-ce qu'il faut trouver 1011 à à partir de 11 ou bien trouver 11 à partir de 1011 ?
Citation : c'est pas forcement des plus 'parlant' |
Désolé, je ne comprends pas bien :
- Est-ce que la priorité est de faire un algorithme qui marche ou un algorithme qui est "parlant" (avec des guillemets comme c'est l'usage en français et en anglais des Etats Unis, les apostrophes étant l'usage en anglais du Royaume Uni) ?
Je crois qu'il faut utiliser les puissance de 2 d'une manière ou d'une autre. Je ne vois pas bien comment faire autrement et pourquoi ne pas s'en servir. Sinon, on pourrait utiliser les décalages, mais je ne sais si cela fait partie de votre cours.
Marsh Posté le 06-01-2011 à 13:13:32
Je cherche les chiffres décimales qui le composent
1011 est composé en décimal de 8-2-1
Marsh Posté le 06-01-2011 à 14:10:12
Les "chiffres décimales" ?
S'il vous plait, regardez dans un dictionnaire de français.
Il existe l'adjectif "décimal", et alors il faut dire les "chiffres décimaux"
Il existe aussi le nom "décimal", et alors cela n'a aucun sens en français de mettre deux noms communs l'un à la suite de l'autre. C'est comme si vous disiez la "musique chant", ou le "piano longueur".
Marsh Posté le 06-01-2011 à 16:09:25
Sebastien a écrit : Bonjour je cherche une facon simple (j'en ai trouvé plusieurs mais ca doit pouvoir etre plus sympa) pour connaitre les nombres decimales qui composent un binaire |
Pas très clair en effet. Un nombre binaire est composé de chiffres binaires (0 ou 1). Un nombre décimal est composé de chiffres décimaux (0, 1, 2, ..., 9). Mais bon je suppose que tu veux transformer un nombre décimal en binaire. Dans ce cas, il suffit de faire une simple division. L'algo donne quelque chose du genre:
Code :
|
L'algorithme peut facilement s'étendre à n'importe quelle base, il suffit de remplacer la valeur 2 par la base souhaitée. Il faut juste considérer que pour les bases supérieures à 10, il faut des "nouveaux" chiffres (par exemple 'A', 'B', 'C', 'D', 'E' et 'F' pou la base 16).
Pour a conversion inverse c'est un poil plus compliqué (mais juste un poil). Par exemple tu peux regarder le schéma de Horner qui donne par exemple pour le nombre binaire 1011 le calcule
nombreDecimal = (((1*2)+0)*2 + 1)*2 + 1
Marsh Posté le 06-01-2011 à 17:07:52
Moi je comprend qu'il veut afficher les puissances de 2 dont la somme donne son nombre.
Un truc comme ça quoi:
Code :
|
Marsh Posté le 06-01-2011 à 20:49:21
H3bus est le plus proche meme si à premiere vue son algo me parait bizarre, mais à tester, ou à arranger je vois son idée et oui ca pourrait etre une piste.
Donc pour faire simple
J'ai 101 je veux afficher
4
1
Pour la petite histoire
J'ai une base qui gère un questionnaire à choix multiple, sur des volumes conséquents.
Et le système est composé ainsi :
[pre]
ID - Réponse
1 Choix 1
2 Choix 2
4 Choix 3
8 Choix 4
16 Choix 5
.....
512 Choix 10
Et donc la 'table' des réponses est :
User - Reponses
1 4
2 27
3 954
....
[/pre]
Exemple l utilisateur 2 à choisit les réponses choix 5 (valeur 16) choix 4 (valeur 8) choix 2 (valeur 2) choix 1 (valeur 1) 16+8+2+1 = 27
On evite ainsi d'avoir pour chaque membres x lignes et on réduit la volumetrie d'autant plus.
Et donc je cherchais comment faire une correspondance entre les 2.
Mon idée fut donc pour pas m'embeter d'utiliser une table de transcodage entre les 2 systèmes, qui contiendrait donc les 1023 combinaisons possibles
Au final il existe en sql (enfin j'utilise sql server 2008 je sais pas trop si c'est standard) une fonction '&' qui permet de faire la liaison entre les 2
une jointure du type
Citation : user & id = id |
Mais bon je veux quand meme savoir en Algo comment retransformer ca.
Marsh Posté le 06-01-2011 à 23:14:39
voilà typiquement le genre d'optimisation qui fait perdre plus de temps au final. Une table n-n entre user et choix auraient été certes plus grosse mais 100 x plus efficace à inner-jointurer (et je parle même pas des contraintes d'intégrité)
Le cas d'école. Faut il rappeler que les optimisations ça se fait APRES avoir fait des benchmark et pas juste au pifomètre "ouais ça va être gros"
Marsh Posté le 07-01-2011 à 10:33:57
Justement non vu que c'est natif au code SQL en fait donc en terme de performance on y perd pas.
La par la suite c'est pour ma culture 'algo' que je me posais la question
http://msdn.microsoft.com/en-us/library/ms174965.aspx
ca semble exister partout (mysql oracle par exemple)
Assez marrant les fonctions
genre
SELECT 29 | 15;
SELECT 29 & 15;
Marsh Posté le 08-01-2011 à 15:28:14
La facon, la plus sera de faire ca:
Si tu veux savoir si ton utilisateur a repondu a la question N:
if (Reponse & (1 << (N-1))) then |
Marsh Posté le 06-01-2011 à 09:37:21
Bonjour je cherche une facon simple (j'en ai trouvé plusieurs mais ca doit pouvoir etre plus sympa) pour connaitre les nombres decimales qui composent un binaire
exemple
1011 c'est 8+2+1
j'ai trouvé en inversant le chiffre et prenant l'index du tableau pour le mettre à la puissance 2 (si different de 0) mais c'est pas forcement des plus 'parlant'
Exemple
1011 => 1101
tableau [index] [valeur]
[0][1]
[1][1]
[2][0]
[3][1]
donc
1x2^0
1*2^1
--0*2^2 //exclure car = 0
1*2^3