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 :

question sur les valeurs hexadecimal


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut question sur les valeurs hexadecimal
    bonsoir à tous,

    j'ai vu dans plusieurs programmes des opérations comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define CF_NOMAIL 0x080
    #define CF_NOREG 0x100
    des definitions de variables avec une valeur hexadecimal et j'avoue que je n'ai pas bien saisi certaines choses.
    Comment sont fixées ces valeurs ? à partir de quoi on peut la définir ?

    j'ai pu trouver un peu de doc sur le opérateurs | et & pour manipuler ces valeurs mais j'ai pas bien comprit comment ca fonctionne, a quoi sert l'operateur |= ? je ne demande pas des réponses toutes faites, si vous aviez simplement une bonne documentation sur ce thème a me fournir ca me suffira largement.

    Que signifie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int flags;
     
    flags |= CF_NOREG;
     
    flags &= ~CF_NOREG;
     
    if (!(flags & CF_NOREG))
    {
           /* code */
    }
    Je vous remercie par avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A vrai dire, une valeur hexadécimale n'est jamais qu'une valeur numérique représentée en suivant une autre convention: la base hexa au lieu de la base décimale.

    L'avantage de la base hexadécimale, c'est qu'elle permet de représenter, sur un seul symbole, exactement quatre bits.

    Ainsi, la valeur 0x100 permet représente en réalité la valeur binaire 0001 0000 0000 soit 1 * 2^9 ( 256 en base 10)

    De même, la valeur 0x080 est correspond à la valeur 0000 1000 0000 en binaire, soit 1*2^8 (128 en base 10)

    Comme tu t'en rend sans doute compte, il s'agit en réalité de valeurs représentables sur un seul bit.

    Le fait de représenter ces valeurs en hexadécimal permet, simplement de faciliter la relecture et la compréhension:

    En binaire, cela ferait tellement de "0" qu'il deviendrait difficile de les compter, et, en décimal, on remarquerait moins facilement qu'il s'agit de valeurs pour lesquelles un seul bit est à "1"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Les valeurs, c'est le programmeur qui les fixe. Ce sont des valeurs comme des autres. L'héxadécimal n'est qu'une représentation, on aurait très bien pu déclarer ces valeurs en octal ou décimal.

    Les opérateurs & et | sont des opérateurs bitwise, c'est-à-dire qui agissent sur les bits. Les opérateurs bitwise sont :
    | = OR
    & = AND
    ^ = XOR
    ~ = inverse tous les bits
    << = Décalage à gauche de 1 bit
    >> = Décalage à droite de 1 bit

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    merci à vous pour vos réponses, donc ces valeurs c'est à moi de les définir, si je choisi de mettre 0x2000 ou 0x40 ca n'a aucune importance ? y a t'il tout de même une convention a respecter ?

  5. #5
    Membre Expert
    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
    Par défaut
    donc ces valeurs c'est à moi de les définir, si je choisi de mettre 0x2000 ou 0x40 ca n'a aucune importance ?
    Ben en fonction de ce que tu veux faire, si, ça a de l'importance.
    D'après ton exemple en #1, ces valeurs permettent de créer des masques.

    Qu'est-ce que ton programme est censé faire exactement (ou, du moins, cette partie de code) ?

  6. #6
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    L'idée c'est généralement d'utiliser des valeurs pour lesquelles un seul bit est à 1 (et un bit différent évidement, sinon c'est le même nombre).

    L'intérêt c'est de pouvoir ensuite créer des masques de bit, c'est à dire qu'on peut combiner les valeurs.

    Imagine que tu as:

    thé = 001, café = 010, chicoré = 100
    Pour représenter une personne qui prend du cawa au petit déjeuné, tu utiliseras simplement la valeur 010.

    Si tu veux représenter une personne qui boit du café ET du thé, il suffit de faire
    thé | café ( 001 | 010 = 011 )
    Tu as peut-être déjà rencontré cette méthode (configurer des sockets, initialiser un contexte SDL, OGL...)

    De même, tu as une personne, tu veux savoir si elle boit de la chicoré (le masque qui représente ce qu'elle boit est dans la variable "var"). Il suffit de faire

    si ( chicoré & var )
    alors elle boit de la chicoré (peut être autre chose aussi)
    sinon
    elle ne boit pas de chicoré
    finsi
    En effet, si var vaut disons 111 (thé et café et chicoré):

    chicoré & var <=> 100 & 111 = 100, c'est bon.
    Si var vaut 010 (uniquement du café), ça donne

    100 & 010 = 0
    Je sais pas si mon exemple est suffisamment clair..

    De mon expérience, c'est essentiellement comme ça qu'on utilisait ce genre de valeurs (programmation sur processeur ARM7 en ASM/C).

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    merci a vous

    jeroman, il s'agit pas d'un code que j'ai fait, ce sont uniquement des operations avec valeur hexa que j'ai trouvé dans plusieurs programme et ne comprenant pas a quoi ca pouvait bien servir j'ai pompé quelques lignes que je voulais qu'ont m'explique et voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CF_NOMAIL 0x080
    CF_NOMAIL semble vouloir dire que si ce masque est à 1, on n'utilisera pas l'envoi d'email automatique, d'ailleur pourquoi ne pas avoir mit 1 tout simplement ?

    je pense avoir quand même comprit l'utilité de ce systeme, on peut declarer un entier pouvant contenir plusieurs masque ou alors j'suis encore a coté de la plaque.

    merci seeme pour tes explications, j'y voit un peu plus claire mais il va me falloir un peu de temps pour assimiler toutes ces notions de bits

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

Discussions similaires

  1. Question sur les tris de Hash / Valeur
    Par KuK dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2012, 13h56
  2. Question sur les valeur min et max des types ?
    Par doommick31 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/04/2010, 17h35
  3. Réponses: 2
    Dernier message: 28/03/2008, 23h28
  4. Question sur les valeurs de SrcBlock et DstBlock
    Par Sensib dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/10/2006, 11h56
  5. question sur les valeurs de retour
    Par arasium dans le forum Langage
    Réponses: 10
    Dernier message: 24/07/2006, 16h47

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