Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

pointeur adressage en C++



  1. #1
    wafa1984

    Question pointeur adressage en C++


    ------

    bonjour,

    supposant qu'on a une variable x de type int et un pointeur p qui point sur cette variable,
    donc dans la déclaration on fait

    int x;
    int *p;
    p=&x;

    bien sur la variable x est située dans une case mémoire sur un certain nombre de bits,
    ma question est:
    tout d'abord comment savoir le nombre de bits sur lesquels la variable x s'étend? c'est à la longueur de x . et comment accéder à un bit particulier de la variable x? par exemple le 3 ième.

    merci d'avance.

    Wafa

    -----

  2. Publicité
  3. #2
    lou_ibmix_xi

    Re : pointeur adressage en C++

    Salut
    comment savoir le nombre de bits sur lesquels la variable x s'étend?
    tu as l'opérateur "sizeof" qui est là pour ça, il te donne la taille d'une variable ou d'un type en nombre d'octets:
    Code:
    int n;
    printf ("taille de n = %d, taille des int = %d\n", sizeof (n), sizeof (int));
    et comment accéder à un bit particulier de la variable x? par exemple le 3 ième.
    On utilise les opérateurs bits à bits, les opérateurs de décalage << et >> (attention à ne pas confondre avec cout << "toto" et cin >> tutu pour les entrées - sorties en C++) pour créer des masques, quelques exemples:
    Code:
    int bit_3 = (1 << 3); /* seul le bit 3 est a 1 */
    int bit_5 = (1 << 5); /* seul le bit 5 est a 1 */
    int bits_3_5 = bit_3 | bit_5; /* ou bits a bits */
    int nbits_3_5 = ~ bits_3_5; /* non bits a bits => tous les bits a 1 sauf le 3 et le 5 */
    
    if (x & bit_3) {
       printf ("le 3eme bit de x=0x%08X est a 1\n", x);
    } else {
       printf ("le 3eme bit de x=0x%08X est a 0\n", x);
    }
    Mais je ne vois pas trop le rapport avec les pointeurs...

  4. #3
    wafa1984

    Re : pointeur adressage en C++

    bonjour,
    puisque le pointeur il pointe sur l'adresse mémoire de la variable, j'ai cru qu'à travers ça, on peut se déplacer sur les bits de cette variable.
    le but n'est pas du tout de connaitre la valeur d'un bit particulier d'une variable; mais plutot connaitre sa valeur et en même temps la possibilité de la changer sans toucher le reste de la variable, par exemple , si
    X= 10011010 et on veut forcer le bit 3 à 1 comment faire?!

  5. #4
    polo974

    Re : pointeur adressage en C++

    http://handy.univ-lyon1.fr/service/c...ot/node81.html

    Sauf qu'il n'est pas dit (spécifié) dans quel ordre les bits sont utilisés (en général du poids faible au poids fort, mais ça n'a rien de garanti). (en tout cas dans le temps c'était pas clair...)
    Sans parler du byte order ...

    Donc le plus simple:
    éviter le int dont on ne connais jamais la taille, utiliser les char, short et long.
    attention au byte order, dès qu'on n'est plus en char et qu'on sort (I/O, network, fichiers échangés, ...)...

    éviter les signed quand il n'y en a pas besoin
    unsigned char data8;

    data8 |= (1<<3); // met a 1 le bit 3

    data8 &= ~(1<<pos); // met a 0 le bit 5

    attention! si la data est du genre à pouvoir être écrite mais que la lecture donne autre chose (par exemple un port d'entrée/sortie en open collector), il faut avoir une variable interne qu'on manipule en & et | (ou avec les bit-fields) et qu'on recopie ensuite sur la sortie.
    Jusqu'ici tout va bien...

  6. A voir en vidéo sur Futura
  7. #5
    wafa1984

    Re : pointeur adressage en C++

    pourquoi tu dis qu'on peut pas connaitre la taille du "int" alors que la commande

    "sizeof" nous le donne ?!

  8. #6
    lou_ibmix_xi

    Re : pointeur adressage en C++

    pourquoi tu dis qu'on peut pas connaitre la taille du "int" alors que la commande

    "sizeof" nous le donne ?!
    Ce qu'il voulait dire par-là c'est que tu ne peux pas la connaître "à priori", c'est à dore lorsque tu écris ton code. En effet, la taille de int (et des autres!) dépends de l'architecture matérielle, de l'OS et du compilateur utilisé...
    Donc si tu as besoins de fixer la taille de tes entiers tu utilises le fichier d'entête <stdint.h> qui définit les entiers suivant leur taille, par exemple "int32_t" est un entier sur 32 bits quelque soit la plateforme...
    Il y a des cas où la taille est import

  9. Publicité
  10. #7
    polo974

    Re : pointeur adressage en C++

    Citation Envoyé par wafa1984 Voir le message
    pourquoi tu dis qu'on peut pas connaitre la taille du "int" alors que la commande

    "sizeof" nous le donne ?!
    Oui, mais avant la compil et l'exécution, on n'en sait rien.

    Alors qu'avec le long et le short, on sait où on va, même si on change de machine cible (ou de compilateur).
    Jusqu'ici tout va bien...

Sur le même sujet


Discussions similaires

  1. adressage step 7
    Par KevCIRA dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 24/07/2009, 08h39
  2. adressage IP
    Par trigax dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 15/04/2009, 13h55
  3. adressage en vhdl
    Par tranquil dans le forum Électronique
    Réponses: 10
    Dernier message: 17/01/2008, 22h39
  4. Adressage protéique
    Par Znomjo dans le forum Biologie
    Réponses: 4
    Dernier message: 02/05/2007, 00h19
  5. adressage relatif
    Par hajjjoura dans le forum Électronique
    Réponses: 2
    Dernier message: 27/11/2006, 15h16
Découvrez nos comparatifs produits sur l'informatique et les technologies.