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 :

Opérations bit à bit


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut Opérations bit à bit
    bonjour,

    Pouvez vous m'aider svp? J'ai une instruction en binaire (32 bits)

    instr=(code<<27)+(valeurRd<<22)+(valeurRn<<17)+(Imm<<16)+(valeurS<<0);

    Mais je veux que ces bits soient mis dans un tableau de taille 32: j'ai écris cette fonction mais ça ne marche pas pourquoi?

    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
    void representation(int *reg,  char *cur_mem){
      int  pos;
      int cur_octet;
      int decal;
     
      pos = 0;
      cur_octet = -1;
      memset(cur_mem, 0, 4);
          while (pos < 32){
              if (!(pos % 8)){
                  cur_octet++;
                  decal = 7;
                }
              cur_mem[cur_octet] += ((char) reg[pos]) << decal--;
              pos++;
            }
    }
    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instr=(code<<27)+(valeurRd<<22)+(valeurRn<<17)+(Imm<<16)+(valeurS<<0);
    Quelle est ta formule pour calculer le décalage des bits ? Tu ne nous l'expliques pas.
    Un coup, il y a un décalage de 0, puis de 16 (+16), puis de 17 (+1), puis de 22 (+5), puis de 27 (+5).
    On ne peut hélas pas deviner.

    A quoi correspondent les variables de ta formule ? Je suppose que ces valeurs sont contenues dans le tableau "reg". Mais tu ne précises pas, on ne peut donc que supposer.

    Si on suit la logique de ton code, au nième passage de la boucle, le décalage de bit correspondra à :

    pos -> decal

    0 -> 7 [on démarre avec un décalage de 7 bits ; position 0 du tableau]
    1 -> 6
    2 -> 5
    3 -> 4
    4 -> 3
    5 -> 2
    6 -> 1
    7 -> 0
    8 -> 7 [on démarre à nouveau avec un décalage de 7 bits ; position 1 du tableau]
    9 -> 6
    (...)
    ... ce qui semble ne pas être cohérent avec ta formule.

    Sans autres explications, on ne peut pas t'aider.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    salut,

    d'après ce que j'ai compris tu fais confusion entre taille de la variables (en nombre de bit) et nombre de variable dont tu en as besoin.

    en fait pour calculer l'instruction dont tu viens de poster t'as besoin de 6 variables de tailles 4 octets(32 bits) soit disant de type int.
    oublis l'opération de shift et tout seras bien pour toi, okay

    et voilà c'est simple!

    si ce n'est pas, t'as à expliquer d'avantage!!

Discussions similaires

  1. Opérations bit à bit sur un pointeur.
    Par valefor dans le forum C++
    Réponses: 7
    Dernier message: 05/01/2012, 16h37
  2. Opérations bit à bit
    Par flo_k dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 28/10/2006, 15h36
  3. Operations bit à bit sur des structures
    Par DarkNagash dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 13h59
  4. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

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