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 :

décalge à droite de bits


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut décalge à droite de bits
    Bonjour, j'ai une petite question concernant le décalage à droite de bits.

    Lorque que l'on décal à droite à droite cela revient à divisé par combien?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Par pow(2, nombre_de_bits) ( x>>2 correspond à x/4).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    donc si j'ai bien compris on divise par 2 si on décale d'un bit?


    Car j'ai utilisé une fonction permettant de faire ce genre de décalage. Je décale de 8 bits et j'obtiens x/4.

    Il y a un problème mais je ne vois pas trop où. Voici la fonction:


    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    /*!
      \fn int ShiftRightFixedValue(int inp , int nbits, int n)
     
      \brief \~french Cette fonction permet de décaler les bits d'un entier
                      signé de n positions vers la droite (équivalent à inp>>n).
                                      si un entier est au format \f$X(a,b)\f$ on a
                                      \f[ X(a,b)>> = X(a-n,b+n)\f]
     
     \param inp   : \~french Valeur entière signé à décaler vers la droite
     \param nbits : \~french Nombre de bits total décrivant l'entier avec le signe
     \param n     : \~french Nombre de bits du décalage
     
     \return \~french Valeur après décalage
    */
     
    int ShiftRightFixedValue(int inp ,int nbits, int n)
    {
      static int sign;
      int mask_sign;
      int abs_inp;
      int max;
      int i,j;
     
      max = (1<<(nbits-1))-1;
      if (n>=nbits) {
        printf("Error in ShiftRightFixedValue() : the shift value exceeds the number of digits in the value\n");
    	exit(EXIT_FAILURE);
      }	 
      mask_sign=max+1;
      if (((mask_sign & inp)>>(nbits-1))==0) 
          sign = 1; 
      else 
          sign = -1;
     
      abs_inp=(int)(fabs((double)inp));
     
      abs_inp>>=n;
      j=abs_inp*sign;
     
      return (j);
    }

    DAns mon exemple au départ je suis codé sur 24bits dont 1 bit de signe.
    Je veux revenirr sur 16bits avec 1 bit de signe.

    Donc

    inp : x
    nbits : 24
    n : 8

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    1. Pourquoi sign est-il static ?
    2. Le décalage lors du second if est inutile.
    3. J'ai de gros doutes sur abs_inp.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Gestion de droits access Bit Bashing
    Par redah75 dans le forum Langage
    Réponses: 4
    Dernier message: 02/10/2013, 16h35
  2. Comment faire une rotation des bits vers la droite ?
    Par Jean-Marc.Bourguet dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 17h12
  3. gestion des droits avec bit bashing
    Par speedev dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2010, 02h43
  4. gestion des droits et bit bashing
    Par orocques dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2010, 12h55
  5. [WD] Décallage d'un bit vers la droite
    Par Amanck dans le forum WinDev
    Réponses: 1
    Dernier message: 27/08/2008, 11h29

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