Répondre à la discussion
Affichage des résultats 1 à 30 sur 30

Décimale - Binaire



  1. #1
    Tix

    Post Décimale - Binaire


    ------

    salut

    j'aimerai faire un petit programme qui lis le port // . Je compte le faire en Qbasic ,et j'ai un probleme ...
    quand je tappe mon petit bout de code :

    Code:
    'début de boucle ...
    DO
    'pour sortir de la boucle ,je lis le clavier
    S$ = inkey$
    'j'entrepose la valeur retournée
    'par INP &h378 dans valbit%
    valbit% = INP &h378
    'et j'affiche valbit%
    lOCATE 1,1:PRINT valbit%
    'fin de la boucle 
    LOOP UNTIL S$ <>""
    END
    j'aimerai convertir la valeur retournée par le port parallele en binaire pour pouvoir l'exploitée ...

    auriez vous une solution ?

    (je n'ai pas de grosses connaissance en math ...)

    merci ,@++ Tix.

    -----

  2. Publicité
  3. #2
    Jeremy

    Re : Décimale - Binaire

    L'ordinateur manipulant les nombres en binaire et convertissant en décimale pour l'affichage, il suffirait de lire ta variable bit par bit. En C je vois, en Basic je sais pas.

  4. #3
    cricri

    Re : Décimale - Binaire

    si tu recupere une chaine de caractere
    0=0 1=1 a =10 b=11 f =15
    deuxieme caractere *16
    3 caractere *16*16
    4 caractere *16*16*16

    etc A7B = 10*16*16+7*16+11

  5. #4
    Jeremy

    Re : Décimale - Binaire

    Sinon un truc c'est de récupérer le bit de poids faible de X par :
    bit0=X mod 2
    Puis décaller X :
    X = X >> 1
    Et boucler :
    bit1=X mod 2 .. décalage, lecture du bit...

    Un autre truc c'est d'utiliser un masque :
    X | 2^n = 0 si le bit n est à 0, sinon c'est égale à 2^n.
    Dernière modification par Jeremy ; 31/08/2005 à 12h23.

  6. A voir en vidéo sur Futura
  7. #5
    planck

    Re : Décimale - Binaire

    je ne sais pas si ça va t'aider, mais pour les tpe on avait eu les mêmes besoins que toi (convertir un entier en binaire), le seul problème est que ce bout de programme est en pascal... mais bon, il y a des explications, et le langage pascal est, je trouve, relativement intuitif...

    Function convert(nb:integer):string;
    Var i:integer;
    bin:string;

    On définit une fonction convert renvoyant une chaîne de caractères qui demande un argument nb de type integer.
    Puis, on définit trois variables i et bin de types respectifs integer et string.


    Begin
    bin[0]=’8’ ;
    For i:=7 downto 0 do
    Begin
    If (nb mod exposant(2,i))=nb
    Then bin[8-i]:='0';
    Else
    Begin
    nb:=nb-exposant(2,i);
    bin[8-i]:='1';
    End;
    End;
    convert:=bin;
    End;

    Le caractère de rang 0 d’une chaîne de caractère définit la longueur de cette chaîne ; ici, elle est égale à 8.
    Boucle de type For : la valeur de la variable locale i est décrémentée de 1 à chaque itération de la boucle en partant de 7.
    Si nb modulo 2i est égal à nb, 0 est stocké dans la chaîne de caractère bin au rang 8-i.
    Sinon, la valeur de nb-2i est stockée dans nb pour l’itération suivante.
    A la fin des huit itérations, on obtient dans bin le nombre nb écrit en binaire dans l’ordre naturel de lecture. La fonction convert retourne donc la valeur de bin.
    si tu penses que ça peut t'aider, mais que tu as des questions, n'hésite pas...

    en espérant avoir un peu aidé...

  8. #6
    Tix

    Re : Décimale - Binaire

    merci pour toutes vos réponses ..

    je ne sais pas si ça va t'aider, mais pour les tpe on avait eu les mêmes besoins que toi (convertir un entier en binaire), le seul problème est que ce bout de programme est en pascal... mais bon, il y a des explications, et le langage pascal est, je trouve, relativement intuitif...


    Citation:
    Function convert(nb:integer):string;
    Var i:integer;
    bin:string;

    On définit une fonction convert renvoyant une chaîne de caractères qui demande un argument nb de type integer.
    Puis, on définit trois variables i et bin de types respectifs integer et string.


    Begin
    bin[0]=’8’ ;
    For i:=7 downto 0 do
    Begin
    If (nb mod exposant(2,i))=nb
    Then bin[8-i]:='0';
    Else
    Begin
    nb:=nb-exposant(2,i);
    bin[8-i]:='1';
    End;
    End;
    convert:=bin;
    End;

    Le caractère de rang 0 d’une chaîne de caractère définit la longueur de cette chaîne ; ici, elle est égale à 8.
    Boucle de type For : la valeur de la variable locale i est décrémentée de 1 à chaque itération de la boucle en partant de 7.
    Si nb modulo 2i est égal à nb, 0 est stocké dans la chaîne de caractère bin au rang 8-i.
    Sinon, la valeur de nb-2i est stockée dans nb pour l’itération suivante.
    A la fin des huit itérations, on obtient dans bin le nombre nb écrit en binaire dans l’ordre naturel de lecture. La fonction convert retourne donc la valeur de bin.




    si tu penses que ça peut t'aider, mais que tu as des questions, n'hésite pas...

    en espérant avoir un peu aidé...je ne sais pas si ça va t'aider, mais pour les tpe on avait eu les mêmes besoins que toi (convertir un entier en binaire), le seul problème est que ce bout de programme est en pascal... mais bon, il y a des explications, et le langage pascal est, je trouve, relativement intuitif...


    Citation:
    Function convert(nb:integer):string;
    Var i:integer;
    bin:string;

    On définit une fonction convert renvoyant une chaîne de caractères qui demande un argument nb de type integer.
    Puis, on définit trois variables i et bin de types respectifs integer et string.


    Begin
    bin[0]=’8’ ;
    For i:=7 downto 0 do
    Begin
    If (nb mod exposant(2,i))=nb
    Then bin[8-i]:='0';
    Else
    Begin
    nb:=nb-exposant(2,i);
    bin[8-i]:='1';
    End;
    End;
    convert:=bin;
    End;

    Le caractère de rang 0 d’une chaîne de caractère définit la longueur de cette chaîne ; ici, elle est égale à 8.
    Boucle de type For : la valeur de la variable locale i est décrémentée de 1 à chaque itération de la boucle en partant de 7.
    Si nb modulo 2i est égal à nb, 0 est stocké dans la chaîne de caractère bin au rang 8-i.
    Sinon, la valeur de nb-2i est stockée dans nb pour l’itération suivante.
    A la fin des huit itérations, on obtient dans bin le nombre nb écrit en binaire dans l’ordre naturel de lecture. La fonction convert retourne donc la valeur de bin.




    si tu penses que ça peut t'aider, mais que tu as des questions, n'hésite pas...

    en espérant avoir un peu aidé...
    heu ,j'ai bien peur de ne pas comprendre le bout de code ,mis à part les boucles et quelques bricoles
    à tu un organigramme à décortiquer ?

    mais le port // renvoie une valeur du type "16"
    "8" ....
    et je voudrais obtenir par exemple un

    0000010 à partir d'un 2
    ou un
    0000011 à partir d'un 4
    ...

    @++ Tix.

  9. Publicité
  10. #7
    planck

    Re : Décimale - Binaire

    pour le principe:

    "tu stockes ton nombre en forme décimal sous la variable nb

    tu définis un mot de longueur 8 (parce que tu travailles en 8 bits)

    tu crées une boucle, variable i, qui va de 7 à 0 (en décroissant!! attention)

    si nb mod 2^i = nb
    alors tu entres un "0" dans la 8-1 du mot de longueur 8 (donc 8-7=1ere case, 8-6=2e case, etc...)

    si ce n'est pas le cas (nb mod 2^i <> nb)
    tu rentres dans nb la valeur nb - 2^i
    et tu rentres dans la case 8-i le nombre 1

    fin des boucles"
    voilà pour le principe. bien sûr, tu n'es pas obligé de prendre i et nb comme variables...un exemple, avec nb=37
    ton mot est pour l'instant _|_|_|_|_|_|_|_

    i=7
    37 mod 2^7 = 37 mod 128 = 37
    donc ça reste le meme, tu remplis la case 8-1=7 avec 0:
    0|_|_|_|_|_|_|_

    i=6
    37 mod 64 = 37
    la case 8-2 = 6 avec 0: 0|0|_|_|_|_|_|_

    i=5
    37 mod 32 = 5, qui est différent de 37
    donc au lieu de 37, tu utilises 37-2^i = 37-2¨5 = 5
    et tu mets un un dans la 8-3 = 3e case
    0|0|1|_|_|_|_|_

    i=4
    5 mod 16 = 5
    0|0|1|0|_|_|_|_

    i=3
    5 mod 8 = 5
    0|0|1|0|0|_|_|_

    i=2
    5 mod 4 = 1
    donc au lieu de 5, tu utilsieras 5 - 2^2=1
    et au lieu de 0, on place 1: 0|0|1|0|0|1|_|_

    i=1
    1 mod 2^1=1
    0|0|1|0|0|1|0|_

    1=0
    1 mod 2^0=1 mod 1 =0
    tu utiliseras (en fait, non puisque c'est la fin du programme)
    1-2^0=0
    et tu places 1
    0|0|1|0|0|1|0|1
    donc 37 en décimal, ça donne 00100101 en binaire

    j'ai supposé que tu connaissais la fonction mod(ulo), si c'est pas le cas, dis le moi... (c'est le reste dans la division euclidienne)

    par ailleurs, je pense que tu voulais dire
    0000010 à partir d'un 2
    ou un
    0000100 à partir d'un 4??

    0000011, ça correspond à 3

  11. #8
    manu_mars

    Re : Décimale - Binaire

    Salut!

    Je vais pinailler, planck sur l'algorithme... Je débute, et me demande si une methode plus 'rapide' (c'est vraiment pinailler...) est possible:

    --DEBUT--

    ENTIER nb, i, r, bin (definition et typage des variables)
    LIRE nb (nombre défini par la saisie au clavier ou par le peripherique)
    i <-- 0 (assigner 0 a i pour la boucle)

    TANT QUE i <inferieur ou egal a> 7

    SI i=0
    ALORS
    r<-- nb mod 2 (pour eviter la division par un)
    SINON
    r<-- nb mod2^i
    FSI

    SI r<>0
    ALORS
    bin<--1 (mettre le bit a 1)
    SINON
    bin<--0
    FSI

    ECRIRE bin (de droite a gauche)
    FTANT
    --FIN--

    En fait, je ne sais pas si c'est plus rapide... ca doit certainement dependre du langage, MAIS je voudrais savoir si l'ordinateur ne traite pas les nombres binaires de droite a gauche plutot que de gauche a droite? ( je t'avais dit, je pinaille.. )

    manu
    Dernière modification par manu_mars ; 31/08/2005 à 21h10.

  12. #9
    Tix

    Re : Décimale - Binaire

    ok !!! ,je crois ke j'ai compris ,e, plus ,j'ai trouver un Pdf qui expliquai un truc avec les restes de diverse divisions ^^ ca doit etre ca

    mon petit centrale va prendre forme ^^

    merci ,@++ Tix.

  13. #10
    manu_mars

    Re : Décimale - Binaire

    attention, hein, je suis debutant, ce que j'ai ecris demande quand meme verification, d'auutant que <> signifiait pour moi "diffrent de"; mais je crois que ca s'ecrit " != "
    manu.

  14. #11
    planck

    Re : Décimale - Binaire

    Citation Envoyé par manu_mars
    Salut!

    Je vais pinailler, planck sur l'algorithme... Je débute, et me demande si une methode plus 'rapide' (c'est vraiment pinailler...) est possible:

    --DEBUT--

    ENTIER nb, i, r, bin (definition et typage des variables)
    LIRE nb (nombre défini par la saisie au clavier ou par le peripherique)
    i <-- 0 (assigner 0 a i pour la boucle)

    TANT QUE i <inferieur ou egal a> 7

    SI i=0
    ALORS
    r<-- nb mod 2 (pour eviter la division par un)
    SINON
    r<-- nb mod2^i
    FSI

    SI r<>0
    ALORS
    bin<--1 (mettre le bit a 1)
    SINON
    bin<--0
    FSI

    ECRIRE bin (de droite a gauche)
    FTANT
    --FIN--

    En fait, je ne sais pas si c'est plus rapide... ca doit certainement dependre du langage, MAIS je voudrais savoir si l'ordinateur ne traite pas les nombres binaires de droite a gauche plutot que de gauche a droite? ( je t'avais dit, je pinaille.. )
    manu
    salu manu

    tu sais, je ne suis pas spécialiste non plus... tout au plus, amateur éclairé

    cependant, à vrai dire je ne comprends pas très bien le fonctionnement de ta boucle... et il me semble que tu as fait quelques fautes (ne serait ce que d'inattention?!)

    en ce qui concerne la lecture des nombres binaires de droite à gauche ou l'inverse, effectivement c'est une lecture comme les nombres en décimal, mais mon algo en tiens compte: on ajoute les bits un à un de gauche à droite, celui à gauche représentant "128", etc...
    cette solution (remplissage dans ce sens) me semble la seule possible:

    par exemple, en reprenant 37, tu vois facilement que 128, 64 ne sont pas dans 37, en revanche 32, 4 et 1 oui... (et 32 + 4 + 1= 37)
    si tu essayes dans l'autre sens: 37 mod 2 = 1, et ensuite? 37-1=36, tu essayes avec quoi?j'ai l'impression que tu me dirais que 36 mod 2^2 =2, donc il y aurait un 2 dans le développement?!

    enfin, il est vrai que je n'ai pas tout compris dans ton algo, il marche peut être! la meilleure façon, c'est encore d'essayer à la main

    et s'il fonctionne, je l'accepterai volontiers, je ne tiens pas à avoir l'exclusivité sur un algo décimal => binaire!!! (quoique, si je dépose un brevet... je peux espérer un peu d'argent??!)

    ah oui au fait: "différent" se note... différemment selon les langages, <> et != sont tous les deux correctes ou non selon le langage que tu utilises (le 1er en pascal, le second en C il me semble)

  15. #12
    manu_mars

    Re : Décimale - Binaire

    Ben en fait, le principe du truc c'est de voir juste si il y a un reste de la division du nombre en question par une puissance de deux.
    Ex: 19:2 = 9,kkechose..
    L'important est qu'il reste quelque chose : alors le bit correspondant a la puissance de deux est mis a un...
    de meme pour 19:2^n : si il ya un reste, alors le bit n est mis a un..

    C'est le principe.
    Je n'ai pas encore installer de prog me permettant d'ecrire et compiler, alors si une bonne ame se sent de chronometrer la vitesse d'execution des deux ecritures ^^..

    Heu, tu pourrais souligner les erreurs que j'ai commises, stp? Je crois que yen a une dans une fin de boucle mal placee, mais je suis pas sur.
    En tout cas, merci!

  16. Publicité
  17. #13
    Jeremy

    Re : Décimale - Binaire

    Essaye ca:

    Code:
    Private Function CBin(Number As Integer) As String
    Dim Temp As Variant
    Temp = 1 'Can't fouble nothing
    Do Until Temp > Number 'sets starting point for Len
        Temp = Temp * 2
    Loop
    Do Until Temp < 1
        If Number >= Temp Then
           CBin = CBin + "1"
           Number = Number - Temp
        Else
            CBin = CBin + "0"
        End If
        Temp = Temp / 2
    Loop 'Loop until string is complete
    CBin = CStr(Val(CBin))
    End Function

  18. #14
    planck

    Re : Décimale - Binaire

    Citation Envoyé par manu_mars
    Ben en fait, le principe du truc c'est de voir juste si il y a un reste de la division du nombre en question par une puissance de deux.
    Ex: 19:2 = 9,kkechose..
    L'important est qu'il reste quelque chose : alors le bit correspondant a la puissance de deux est mis a un...
    de meme pour 19:2^n : si il ya un reste, alors le bit n est mis a un..

    C'est le principe.
    Je n'ai pas encore installer de prog me permettant d'ecrire et compiler, alors si une bonne ame se sent de chronometrer la vitesse d'execution des deux ecritures ^^..

    Heu, tu pourrais souligner les erreurs que j'ai commises, stp? Je crois que yen a une dans une fin de boucle mal placee, mais je suis pas sur.
    En tout cas, merci!
    sans vouloir être désobligeant, il me semble que le principe même est faux, tu ne peux pas simplement diviser ton nombre par 2^n pour savoir si le bit de rang n+1 (oui, on commence à 0, et le rang de bit à 1) est 1 ou 0, selon le reste...
    tu es obligé de retrancher à chaque fois selon les puissances de 2 décroissantes

    par exemple,
    37 mod 2^1 =1
    37 mod 2^2 = 1
    37 mod 2^3 =5
    37 mod 2^4 =5
    37 mod 2^5 =5
    37 mod 2^6=37
    37 mod 2^7=37

    donc ton nombre binaire serait 373755511 ? non...
    regarde le message n°7
    en ce qui concerne ton programme, je ne comprends pas trop l'intérêt du "si i=0", par ailleurs, tu oublies d'incrémenter i quelque part dans ta boucle, donc il restera à 0... (tu as choisis une boucle tant que, peut être au lieu d'une boucle for?)

  19. #15
    Tix

    Re : Décimale - Binaire

    slt

    bon ,donc je pense que je vais pas commencer à essayer de comprendre tout de suite (je vien de me lever .... )

    par ailleurs, je pense que tu voulais dire
    0000010 à partir d'un 2
    ou un
    0000100 à partir d'un 4??

    0000011, ça correspond à 3
    oui ,je me suis en effet redu ridicule ... mais en repensent à la méthode que j'utilise pour m'en souvenir ,tu à raison ,j'a sauté uen étape .... ca m'évitera une nouvelle bourde ^^

    Private Function CBin(Number As Integer) As String
    Dim Temp As Variant
    Temp = 1 'Can't fouble nothing
    Do Until Temp > Number 'sets starting point for Len
    Temp = Temp * 2
    Loop
    Do Until Temp < 1
    If Number >= Temp Then
    CBin = CBin + "1"
    Number = Number - Temp
    Else
    CBin = CBin + "0"
    End If
    Temp = Temp / 2
    Loop 'Loop until string is complete
    CBin = CStr(Val(CBin))
    End Function
    ho ! , c pas du basic ca ^^ huhuhu...
    mais ca y ressemble ,je vais pouvoir le décortiquer

    je ne vais pas prendre part au débat mathémétique n'ayan pas le niveau ...

    @++ Tix.

  20. #16
    manu_mars

    Re : Décimale - Binaire

    Citation Envoyé par planck
    par exemple,
    37 mod 2^1 =1
    37 mod 2^2 = 1
    37 mod 2^3 =5
    37 mod 2^4 =5
    37 mod 2^5 =5
    37 mod 2^6=37
    37 mod 2^7=37



    (tu as choisis une boucle tant que, peut être au lieu d'une boucle for?)

    (pour la boucle: voui c un tant que)

    en fait, je me rend compte que nb mod 2^i donne une valeur APPROCHEE ?? dans mon esprit, cela servait plutot a voir un reste different de 0.
    Pour m'exprimer plus clairement voici le raisonnement que j'ai suivi:

    -Comparons un nombre decimal avec son equivalent en binaire.

    nous retrouvons une analogie entre le rang des unites, puis dizaine, centaine, etc... correspondant en decimal au rang 100, 101 , 102 , qui en mode binaire peut s'exprimer sur les bits de rang 1,2,3... 20 ,21 , 22 , etc... jusqu'au rang 7 (pratiquement, jusqu'au rang ou on veut)

    En poursuivant l'analogie, je remarque que si un reste EXISTE pour 37/2, alors, le bit de rang 1 passera a 1 comme pour signifier que le reste existe en decimal... si le reste N'EXISTE PAS, egal a 0 autrement dit, alors le bit passera a zero pour le rang correspondant.
    De meme, je peux dire que puisque il existe un reste a 37/25, je sais que le bit de rang 6 passera a 1....

    Effectivement, le probleme se pose lorsque la machine considere une valeur ENTIERE et APPROCHEE a l'operation 37mod25 ... puisque c'est ce qu'il se trouve APRES la virgule qui nous interesse.

    Je sais que sur le principe je n'ai pas tort jusqu'a preuve du contraire , mais par contre, ecrire ca en langage de programmation n'est pas encore tout a fait a ma portee...

    ex:

    37= 7*100 +3*101

    = 7 + 30

    en binaire, et en partant de la droite:

    1 0 0 0 1 1
    = 20 +21 +25 (toujours en partant de la droite, puisque l'on va de l'unite à la plus grande valeur connue)

    =37 en decimal.

  21. #17
    g_h

    Re : Décimale - Binaire

    Citation Envoyé par manu_mars
    De meme, je peux dire que puisque il existe un reste a 37/25, je sais que le bit de rang 6 passera a 1....
    Faisons la division euclidienne de 37/272.
    Quotient = 0
    Reste = 37

    Il y a un reste, et pourtant je ne vaispas mettre le bit correspondant à 1.

    Ou alors je n'ai pas compris...

  22. #18
    manu_mars

    Exclamation Re : Décimale - Binaire

    Citation Envoyé par manu_mars


    ex:

    37= 7*100 +3*101

    = 7 + 30

    en binaire, et en partant de la droite:
    il faut lire evidemment:

    1 0 0 1 0 1

    = 20 +22 +25 (toujours en partant de la droite, puisque l'on va de l'unite à la plus grande valeur connue)

    = 1 + 4 + 32

    =37 en decimal.

    Mouarf.

  23. Publicité
  24. #19
    g_h

    Re : Décimale - Binaire

    Et puis je me demande : il existe bien des opérateurs binaires en qbasic ? (and, or, shr, shl...)
    C'est autrement plus adapté à la manipulation des bits que de faire des divisions successives avec des puissances de 2 !

  25. #20
    manu_mars

    Re : Décimale - Binaire

    Citation Envoyé par g_h
    Faisons la division euclidienne de 37/272.
    Quotient = 0
    Reste = 37

    Il y a un reste, et pourtant je ne vaispas mettre le bit correspondant à 1.

    Ou alors je n'ai pas compris...

    ben on ne cherche a decomposer un nombre que jusqu'au rang des unites... il faudrait effectivement ajouter un controle qui verifie que lorsqu'on on atteint un reste plus petit que 1, on s'arrete..

  26. #21
    g_h

    Re : Décimale - Binaire

    Citation Envoyé par manu_mars
    il faudrait effectivement ajouter un controle qui verifie que lorsqu'on on atteint un reste plus petit que 1, on s'arrete..
    Arf...
    Faisons la division euclidienne de 4 par 2
    Quotient = 2
    Reste = 0

    J'ai un reste plus petit que 1, donc je m'arrête
    Donc... 4 = 0
    Pas terrible
    Dernière modification par g_h ; 01/09/2005 à 12h36. Motif: grosse boulette

  27. #22
    g_h

    Re : Décimale - Binaire

    Et de toute façon, tout nombre impair n'est divisible par aucune puissance de 2 (excepté 20 bien sur)
    Donc il y aura toujours un reste, et donc les nombres impairs, tu les coderas uniquement avec des 1 : erreur assurée.

    (par contre, je réitère ma remarque du message #19 )

  28. #23
    planck

    Re : Décimale - Binaire

    mais ça marche si on part du "plus grand côté"!

    37/128=0 reste 37 => 0
    37/64 =0 reste 37 => 0
    37/32 = 1 reste 5 => 1, et on travaille avec 5, le reste
    5/16 = 0 reste 5 => 0
    5/8 = 0 reste 5 => 0
    5/4 = 1 reste 1 => 1, et on travaille avec 1
    1/2 = 0 rsete 1 => 0
    1/1 = 1 reste 0=> 1

    d'où 37 correspond à 00100101....

    montre nous comment ton algorithme fonctionne en prenant un nombre décimal, et en le transformant en binaire... fais le completement, tu constateras par toi même que ta méthode ne parvient pas au bon résultat (et il n'y a aucune agressivité dans ce message...!)
    Dernière modification par planck ; 01/09/2005 à 13h08.

  29. #24
    manu_mars

    Re : Décimale - Binaire

    Citation Envoyé par planck
    montre nous comment ton algorithme fonctionne en prenant un nombre décimal, et en le transformant en binaire... fais le completement, tu constateras par toi même que ta méthode ne parvient pas au bon résultat (et il n'y a aucune agressivité dans ce message...!)
    Youpla!
    je sais et d'ailleurs point véxé je suis!
    Au contraire, etant débutant, j'apprend mieux avec vos objections, et c'est tant mieux.

    Pour les nombres decimaux: c'est vrai que ce genre de nombre est pénible, car il faut alors considerer les chiffres apres la virgules comme des puissances inverses de 2, et en binaire... c'est la panade; d'ou le bug fameux des premiers pentiums sortis vers la fin des annees '90 il me semble... Il fallait alors des corrections logicielles; et a ce sujet, si quelqu'un peut m'expliquer comment ce probleme a été résolu et comment maintenant ce genre de nombre est géré, ca m'interesse bougrement.
    Bon, promis, pour ce qui est de l'algorithme, je vais prendre le temps de chercher et de comprendre le #7...
    manu

  30. Publicité
  31. #25
    Tix

    Re : Décimale - Binaire

    mais dans tout ca ,je fait koi moi ? :'(
    lol ,ca marche ou pas la division euclidienne ? ,et dans touts les cas ?

    merci ,@++ Tix.

  32. #26
    Jeremy

    Re : Décimale - Binaire

    J'ai donné une fonction codée en VB quelque part sur la première page qui doit marcher, tu as testé ?

  33. #27
    g_h

    Re : Décimale - Binaire

    Tix : au cas où, je te repose ma question :

    Citation Envoyé par g_h
    Et puis je me demande : il existe bien des opérateurs binaires en qbasic ? (and, or, shr, shl...)
    C'est autrement plus adapté à la manipulation des bits que de faire des divisions successives avec des puissances de 2 !

  34. #28
    Pole

    Re : Décimale - Binaire

    On a pas besoin de ces choses là : soit à convertir 37 en base 2.
    37 mod 2=1 On continue avec 37/2 (le quotient)
    18 mod 2=0
    9 mod 2=1
    4 mod 2=0
    2 mod 2=0
    1 mod 2=1
    0.
    Après, on lit de bas en haut 100101=1+4+32=37.
    Rien qu'avec des divisions par 2. l'algo doit être plus rapide : pas de calculs de puissances de 2.

    Un peu de Turbo Pascal (de tête donc il doit y avoir des erreurs) :
    uses crt;
    var base10:byte;
    log2,i:0..7;
    begin
    clrscr;
    readln(base10);
    log2:=0;
    while base10<>0 do begin
    asm
    mov ax,base10;
    div byte ptr 2;
    push ah;
    mov base10,al;
    end;
    log2:=log2+1;
    end;
    for i:=0 to log2 do begin
    asm
    pop base10;
    end;
    write(base10);
    end;
    readln;
    end.
    Je n'ais pas pu m'empécher d'utiliser l'assembleur pour inverser les chiffres obtenus.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  35. #29
    g_h

    Re : Décimale - Binaire

    Hé, toi qui fais de l'assembleur, tu ne trouves pas que de faire shl / jc serait plus adéquat que de faire des div, des push et des pop... ?

    De toute façon, la question est bien trop vague... combien de bits à extraire ? 1 par 1, par petits paquets... ?

  36. #30
    Tix

    Re : Décimale - Binaire

    J'ai donné une fonction codée en VB quelque part sur la première page qui doit marcher, tu as testé ?

    Jeremy

    bha ,disons que de VBA à QBasic .... j'ai essayer de fair le transfert mais je ne connais pas le vb ...



    Tix : au cas où, je te repose ma question :
    oops,avais pas compris que c'était une question ,dsl

    Citation:
    Posté par g_h
    Et puis je me demande : il existe bien des opérateurs binaires en qbasic ? (and, or, shr, shl...)
    C'est autrement plus adapté à la manipulation des bits que de faire des divisions successives avec des puissances de 2 !
    et bien , ya or ,and ,xor ,... mais shr et shl ????

    @++ Tix.

Discussions similaires

  1. formule dilution décimale
    Par quakefire dans le forum Biologie
    Réponses: 0
    Dernier message: 15/05/2007, 20h46
  2. decimale en binaire
    Par sdow dans le forum Électronique
    Réponses: 15
    Dernier message: 17/09/2006, 15h25
  3. Conversion Binaire-Decimale
    Par EaGle58 dans le forum Technologies
    Réponses: 4
    Dernier message: 10/01/2006, 10h49
  4. Ecriture décimale et nombre de chiffres
    Par Witten dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 21/10/2005, 20h47
  5. Décimale Binaire ...
    Par Tix dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 31/08/2005, 14h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.