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

MATLAB Discussion :

Opérations logiques sur des bits


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 16
    Points
    16
    Par défaut Opérations logiques sur des bits
    Bonjour,

    je souhaiterais ecrire uniquement un bit du nombre 10 par exemple. Mettons, je souhaite ecrire le bit de poids faible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     a = (1 & 10);
     disp(a);
         1
    J'aurais penser qu'avec cette instruction j'obtiendrai un 0 ! Puisque 1 correspond a '0001' et 10 a '1010' donc en faisant l'operation avec le '&', les '0' auraient pris le dessus et j'aurai du obtenir '0000' non ?

    Si je souhaite faire cela, c'est pour, dans une boucle 'FOR' etre capable de renseigner 4 pinoches de ma carte arduino pour selectionner une sortie sur un multiplexeur.
    Evidemment je peux toujours trouver une autre solution en bourinant des IF de partout mais bon c'est grossier et sa prend vachement de place.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=0:15
        a.digitalWrite(0, 'ecrire le bit de poids faible de i');
        a.digitalWrite(1, 'ecrire le second bit de poids faible de i');
        a.digitalWrite(2, 'ecrire le troisieme bit de poids faible de i');
        a.digitalWrite(3, 'ecrire le quatrieme bit de poids faible de i');
    Poursuivant l'idee du debut, sa aurais ressembler a sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=0:15
        a.digitalWrite(0, (1 & i));
        a.digitalWrite(1, (2 & i));
        a.digitalWrite(2, (4 & i));
        a.digitalWrite(3, (8 & i));
    D'avance merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Quand tu fais a & b sous MATLAB, ce n'est pas un test de bits mais un test de valeurs qui signifie "est-ce que a ET b sont différents de 0 ?"

    Pour ce que tu cherches à faire, je te renvoie vers la documentation des fonctions bitand, bitor, bitget...

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Le problème est que 1 et 10 ne sont pas bits mais des double. Etant non nuls, ton résultat est normal. Il faut passer par

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Super merci, j'ai lu toutes les doc de fonction qui m'interessait (j'arrivais pas a trouver en cherchant dans l'aide vu que je connaissais pas les noms ... ).

    Donc voila j'ai fait exactement ce que je voulais. Je laisse le code si quelqu'un se pose les memes questions que moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i=0:15
        a.digitalWrite(0, bitand(1,i));
        a.digitalWrite(1, bitshift(bitand(2,i),-1));
        a.digitalWrite(2, bitshift(bitand(4,i),-2));
        a.digitalWrite(3, bitshift(bitand(8,1),-3));
    end

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Ce serait plus simple avec bitget, non ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Oui effectivement c'est plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    % for i=0:15
         a.digitalWrite(0, bitget(i,1));
         a.digitalWrite(1, bitget(i,2));
         a.digitalWrite(2, bitget(i,3));
         a.digitalWrite(3, bitget(i,4));
    end

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

Discussions similaires

  1. [SimpleXML] Opérations mathématiques sur des float
    Par CBresso dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 11/05/2012, 13h38
  2. Réponses: 0
    Dernier message: 04/12/2011, 11h29
  3. Opération logique sur des binaires
    Par tchoimars dans le forum PL/SQL
    Réponses: 1
    Dernier message: 12/11/2008, 15h32
  4. AND logique sur les bits
    Par edam dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/02/2007, 19h26
  5. Réponses: 4
    Dernier message: 19/02/2006, 18h18

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