IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Simulink Discussion :

Conversion nombre décimal <-> binaire (signé et flottant)


Sujet :

Simulink

  1. #1
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut Conversion nombre décimal <-> binaire (signé et flottant)
    Bonjour à tous,

    je cherche en réalité à comprendre le fonctionnement de la fonction "Shift Arithmetic" sous Simulink car même avec l'aide je ne saisis pas les possibilités de cette fonction.
    J'ai donc d'abord souhaité comprendre comment Matlab gère les nombres binaires/décimaux qu'ils soient signés et/ou flottants. J'en suis venu à faire un constat assez marrant. Jugez par vous même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dec2bin(101.5)
    
    ans =
    
    1100101
    
    >> bin2dec(ans)
    
    ans =
    
       101
    Quelqu'un a une explication svp ? Merci de votre aide
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut,

    C'est normal que la partie décimale du nombre décimal ne soit pas prise en compte. Si tu regardes le programme dec2bin, tu verras qu'il y a un magnifique floor utilisé pendant la conversion ^_^

    Pour convertir des nombres réels avec une partie décimale, il faut faire deux conversions. Partie réelle et partie décimale. En fait, ca revient à considérer la partie décimale en puissance de 2 négative.

    Tu peux jetter un coup d'oeil sur ce site, il est très bien fait ;-)
    codage nombre

  3. #3
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    D'accord je te remercie pour les explications et pour le lien donné.

    Néanmoins, j'ai du mal à comprendre comment fonctionne cette fonction "Arithmetic Shift". Par exemple, je mets 101 à l'entrée du bloc. Si je sélectionne 1 pour le number of bits to shift to right et 0 pour le number of places by which binary points shifts right, j'obtiens en sortie 50.5.
    Pourtant, si je fais la conversion de 101 en binaire, j'obtiens '1100101', que je décale d'un bit à droite j'obtiens '1110010' ce qui fait 114 et pas 50.5

    Je n'ai pas compris comment fonctionne ce "shift" à droite je crois.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  4. #4
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par lecteur1001 Voir le message
    Pourtant, si je fais la conversion de 101 en binaire, j'obtiens '1100101', que je décale d'un bit à droite j'obtiens '1110010' ce qui fait 114 et pas 50.5
    Je cherchais trop compliqué. En fait, il ne s'agit pas d'une rotation de bits comme je le pensais mais d'un décalage pur et simple sur la droite. Si le décalage est de 1 à droite, le bit de poids fort est supprimé. Donc pour reprendre mon exemple ci-dessus :
    101 en décimal vaut '1100101' en binaire. Décalage de 1 à droite : '110010' qui vaut 50 en décimal. Et pas 50.5 car la partie flottante est "supprimée".

    Par contre, je ne comprends pas encore le rôle du paramètre number of places by which binary points shifts right, j'ai l'impression qu'il fait l'inverse du 1er paramètre sans bien comprendre la subtilité.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Heu là je ne peux donner que des pistes puisque je ne suis pas calé niveau simulink. Mais ton opération à droite ne te permet pas de faire l'inverse de ton opération à gauche ? Un sorte de bourage de bit à droite quoi.

    En gros, si tu as un nombre binaire 11001. Tu fais un décalage à droite te donnant 111001. Ca doit (peut-être) te permettre de convertir des chiffres avec des décimales ?

  6. #6
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Merel Voir le message
    Heu là je ne peux donner que des pistes puisque je ne suis pas calé niveau simulink. Mais ton opération à droite ne te permet pas de faire l'inverse de ton opération à gauche ? Un sorte de bourage de bit à droite quoi.
    De quelle opération à gauche parles-tu ?

    Citation Envoyé par Merel Voir le message
    En gros, si tu as un nombre binaire 11001. Tu fais un décalage à droite te donnant 111001. Ca doit (peut-être) te permettre de convertir des chiffres avec des décimales ?
    Ben non, le décalage à droite tel qu'il est défini par la fonction Arithmetic shift donnerait 1100 en binaire et pas 111001 comme tu le dis.
    Je ne dois pas avoir saisi ce que tu as dit.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Après quelques recherches dans mes vieux vieux cours, j'ai retrouvé le shift à droite ou à gauche. Ca permet en fait de multplier ou de diviser un nombre par la valeur de sa base. Ici, multiplier par 2 ou diviser par 2 ton nombre initial avec un arrondi. Ce que tu retrouves sur ton exemple.

    101 avec un shift à droite => 50
    Si tu fais un shift à gauche, tu vas avoir 101*2 => 202 => 11001010

  8. #8
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Merel Voir le message
    Après quelques recherches dans mes vieux vieux cours, j'ai retrouvé le shift à droite ou à gauche. Ca permet en fait de multplier ou de diviser un nombre par la valeur de sa base. Ici, multiplier par 2 ou diviser par 2 ton nombre initial avec un arrondi. Ce que tu retrouves sur ton exemple.

    101 avec un shift à droite => 50
    Si tu fais un shift à gauche, tu vas avoir 101*2 => 202 => 11001010
    Oui c'est normal, c'est ce que j'ai compris aussi.

    Cependant, ces deux opérations sont possibles en jouant sur la paramètre number of bits to shift to right (positif -> décalage à droite, négatif --> décalage à gauche).
    C'est donc le paramètre number of places by which binary points shifts right que je ne comprends pas.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Et en faisant des tests sur ce paramètre à partir de 101 ou 50, ca donne quoi ?

    Bha en faisant des tests, j'obtiens la même chose en utilisant les deux entrées.

    Pour 101 au départ et si tu mets 1,0 dans les paramètres, j'obtiens 50.5 en résultat
    Pour 101 et 0,1 j'obtiens 202 qui est identique à 101 et -1,0. Le 50.5 étant identique à 101 et 0,-1

  10. #10
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Merel Voir le message
    Et en faisant des tests sur ce paramètre à partir de 101 ou 50, ca donne quoi ?

    Bha en faisant des tests, j'obtiens la même chose en utilisant les deux entrées.

    Pour 101 au départ et si tu mets 1,0 dans les paramètres, j'obtiens 50.5 en résultat
    Pour 101 et 0,1 j'obtiens 202 qui est identique à 101 et -1,0. Le 50.5 étant identique à 101 et 0,-1
    Oui je me suis fait la même remarque que toi en faisant quelques tests.
    Le truc, c'est que je trouve bizarre qu'il y ait deux paramètres pour faire "la même chose". Sachant qu'il est bien écrit entre parenthèses use negative value to shift left dans les 2 cas et que le second paramètre parle de binary point.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    ha je crois que j'ai compris le truc avec l'aide. En fait tu as soit un décalage de bit soit un bourrage de bit.

    Si tu regardes l'aide, avec 2 shift bits right tu passes de 11001,011 à 11110,010. Donc tu rajoutes deux 1 à gauche et la virgule ne change pas de place. Autrement dit, tu multiplies ou divises ton nombre par 4.

    Si tu utilises le binary shift tu passes de 11001,011 à 1100101,1. Donc juste un décalage de ton numbre avec changement de place de la virgule. Ce qui n'est plus équivalent à une division ou multiplication...

  12. #12
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Merel Voir le message
    ha je crois que j'ai compris le truc avec l'aide. En fait tu as soit un décalage de bit soit un bourrage de bit.

    Si tu regardes l'aide, avec 2 shift bits right tu passes de 11001,011 à 11110,010. Donc tu rajoutes deux 1 à gauche et la virgule ne change pas de place. Autrement dit, tu multiplies ou divises ton nombre par 4.

    Si tu utilises le binary shift tu passes de 11001,011 à 1100101,1. Donc juste un décalage de ton numbre avec changement de place de la virgule. Ce qui n'est plus équivalent à une division ou multiplication...
    Impeccable ! Tu as effectivement raison, je n'avais pas compris la subtilité !
    Merci à toi pour ta patience
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Mais de rien ^_^
    Un spécialiste de simulink aurait trouvé le truc plus rapidement je pense. Mais l'important c'est d'y arriver !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion nombre décimal négatif
    Par Dev 37C dans le forum C
    Réponses: 5
    Dernier message: 03/01/2013, 22h25
  2. [XL-2003] Conversion nombre décimal en heure
    Par anonymous1.0 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2011, 12h54
  3. Conversion nombre décimal en virgule flottante IEEE 754 (exprimé en hexa)
    Par vinssieux dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 15/05/2008, 09h40
  4. CRITERIA - Représentation binaire d'un nombre décimal signé.
    Par RamDevTeam dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/08/2005, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo