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 :

Bit de poid fort et faible dans un unsigned short


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut Bit de poid fort et faible dans un unsigned short
    Bonjour les gens,

    je voulais avoir votre avis sur un principe que je ne maîtrise pas vraiment.
    Pour exposer le problème, j'ai une variable à remplir dans une structure et celle-ci est un tableau de deux BYTE. Chaque BYTE doit avoir la valeur de 127 maximum. Donc la dernière combinaison possible serait [127,127].
    J'ai donc pensé que l'utilisateur pourrait m'envoyer un unsigned short comportant le bit de poid fort (127 max. donc) d'un côté et le faible de l'autre (127 max. pareil), le tout sur 16 bits donc (unsigned short).

    Je suppose que le masque de bit doit être égale à 0x7F non ?

    Comment puis-je faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WORD w_test = 16383; // nombre max. de combinaison
    BYTE by_mask = 0x7F;
    BYTE by_fort = 0;
    BYTE by_faible = 0;
     
    by_fort = ??// je devrais retrouver 127
    by_faible = ??// je devrais retrouver 127
    Je vous remercie pour vos conseils !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Précision importante : quelle doit-être la valeur minimum de chacun de tes bytes ? Est-ce zéro ?

    Si oui, tu peux effectivement t'en sortir avec un masque à 0x7F et un décalage de bits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WORD test = 0x1234;
    BYTE high;
    BYTE low;
     
    high = (test >> 8) & 0x7f;
    low  = test & 0x7f;
    Par contre, 16383 est bien la valeur maximale non signée que l'on puisse coder avec 14 bits, mais ils sont tous tassés du même côté. Donc, l'octet de poids faible a bien huit bits significatifs et l'octet de poids fort n'en a que 6. Si c'est bien comme cela que tu reçois la valeur à stocker et que tu cherches à la décomposer en deux octets, alors il faudra compenser par un décalage vers la gauche, soit au final test >> 7 au lieu de 8.

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Merci beaucoup Obsidian !

    Oui à partir de zéro !

    En effet très bien expliquer, voici le code entier :

    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
     
     
    WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
    	{
    		 return   (( Byte_hi << 7  ) | Byte_lo & 0x007F );
    	}
     
    WORD w_test = 0;		
    BYTE by_fort = 127;
    BYTE by_faible = 127;
     
    w_test = MAKE_WORD(by_fort,by_faible); // w_test est bien égal à 16383 
     
    by_fort = (w_test >> 7) & 0x7F; // je retrouve bien 127 //  j'ai du décaler de 7 en effet
    by_faible = w_test & 0x7F; // je retrouve bien 127 // là je pense que tu voulais mettre 0x7F nn ?
    Merci et bonne journée à toi !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par phoenixgreg Voir le message
    là je pense que tu voulais mettre 0x7F non ?

    Merci et bonne journée à toi !
    Absolumement.
    Je m'en suis rendu compte en me relisant et je viens de corriger. Désolé pour cette coquille.

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

Discussions similaires

  1. Comment avoir l'octet de poids fort et faible d'un nombre
    Par azerty25 dans le forum Général Python
    Réponses: 7
    Dernier message: 02/12/2015, 16h41
  2. [XL-2003] Concaténer un poids fort et faible pour former un Long
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/07/2011, 12h53
  3. Réponses: 3
    Dernier message: 12/01/2011, 11h51
  4. inversion de bits (poid faible / poid fort)
    Par damdam78 dans le forum C++
    Réponses: 2
    Dernier message: 04/03/2009, 18h17
  5. Bit de poids Fort
    Par Macno dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/07/2007, 23h40

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