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

C Discussion :

Concaténation de bits


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Concaténation de bits
    Bonjour,
    j'ai 32 bits répartis sur 8 registres, donc 4 bits dans chaque registre:
    reg 143->D0
    reg 167->D4
    reg 1811->D8
    reg 2015->D12
    reg 2219->D16
    reg 2423->D20
    reg 2627->D24
    reg 2831->D28,

    j'aimerais savoir comment faire pour les lire et les concaténer.

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il existe en C les et ,ou,.... binaire (&,|,^)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    oui il y a le OU inclusif mais je ne comprend pas trop comment ça fonctionne

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Cela suppose que tu connais la notation binaire...

    Soit les valeurs 10 et 12 (à titre d'exemple)
    En binaire :
    10 = 1010
    12 = 1100

    le Et binaire (&) :
    vrai quand 1 et 1 exclusivement
    donc
    Le OU binaire (|) :
    vrai quand au moins 1
    donc
    Le OU binaire exclusif (^) :
    vrai quand 1 et 0

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    en fait je ne sais pas comment appliquer le ou inclusif à mon cas..

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Ben la syntaxe globale est :
    resultat = reg1 | reg2

    ou alors je ne comprends pas ce que tu demandes exactement...

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    et bien comment récupérer reg 1 et reg2?

  8. #8
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 191
    Points : 11 577
    Points
    11 577
    Par défaut
    Imaginons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    void main (void)
    {
      unsigned long int reg_principal = 0;
     
      /* reg1 à reg8 sont tes 8 registres avec 4 bits par registre */
     
      unsigned char reg1 = 0x05; /* donnée  = 4 bits de poids faibles */
      unsigned char reg2 = 0x0A;
      unsigned char reg3 = 0x06;
      unsigned char reg4 = 0x0F;
      unsigned char reg5 = 0x0C;
      unsigned char reg6 = 0x01;
      unsigned char reg7 = 0x00;
      unsigned char reg8 = 0x0E;
     
      /* le but étant de recréer dans reg_principal 0xE01CF6A5 ? */
      /* dans ce cas : on peut faire */
     
      reg_principal = reg1;
      reg_principal = reg_principal | (reg2 << 4);
      reg_principal = reg_principal | (reg3 << 8);
      reg_principal = reg_principal | (reg4 << 12);
      reg_principal = reg_principal | (reg5 << 16);
      reg_principal = reg_principal | (reg6 << 20);
      reg_principal = reg_principal | (reg7 << 24);
      reg_principal = reg_principal | (reg8 << 28);
     
      printf("%X\n", reg_principal);
     
      getchar();
    }
    C'est ça que tu veux faire ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Vincent PETIT
    Imaginons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void main (void)
    <...>
    Ok pour la brillante explication, mais je rappelle que main() retourne int. Toujours!
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    merci

  11. #11
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 191
    Points : 11 577
    Points
    11 577
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Vincent PETIT
    Imaginons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void main (void)
    <...>
    Ok pour la brillante explication, mais je rappelle que main() retourne int. Toujours!
    Bien joué Emmanuel Delahaye + 1 pour toi !
    J'avais compilé ce code avec C18 C Compiler de Microchip® (Compilateur C pour microcontrôleur PICmicro® de la famille 18xxxx) je n'avais donc pas jugé nécessaire de faire retourner une valeure à "main".

    Mais effectivement sur PC cela devient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdlib.h>
     
    int main (void) 
    { 
      unsigned long int reg_principal = 0; 
     
      /* reg1 à reg8 sont tes 8 registres avec 4 bits par registre */ 
     
      unsigned char reg1 = 0x05; /* donnée  = 4 bits de poids faibles */ 
      unsigned char reg2 = 0x0A; 
      unsigned char reg3 = 0x06; 
      unsigned char reg4 = 0x0F; 
      unsigned char reg5 = 0x0C; 
      unsigned char reg6 = 0x01; 
      unsigned char reg7 = 0x00; 
      unsigned char reg8 = 0x0E; 
     
      /* le but étant de recréer dans reg_principal 0xE01CF6A5 ? */ 
      /* dans ce cas : on peut faire */ 
     
      reg_principal = reg1; 
      reg_principal = reg_principal | (reg2 << 4); 
      reg_principal = reg_principal | (reg3 << 8); 
      reg_principal = reg_principal | (reg4 << 12); 
      reg_principal = reg_principal | (reg5 << 16); 
      reg_principal = reg_principal | (reg6 << 20); 
      reg_principal = reg_principal | (reg7 << 24); 
      reg_principal = reg_principal | (reg8 << 28); 
     
      printf("%X\n", reg_principal); 
     
      getchar();
      return EXIT_SUCCESS; 
    }
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/02/2015, 13h41
  2. concaténation bit à bit dans int
    Par psycho_xn dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 08/12/2009, 17h26
  3. Réponses: 5
    Dernier message: 20/03/2009, 18h16
  4. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

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