Se connecter avec
S'enregistrer | Connectez-vous

Pointeur et adressage en C++

Dernière réponse : dans Programmation

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

Autres pages sur : pointeur adressage

Lassé par la pub ? Créez un compte
Expert Programmation

Un int est codé sur la plupart des machines que l'on utilise sur 4 octets (32bits), un short est codé sur 2 octets (16bits) et un char est codé sur 1 octet (8bits). On ne descend pas plus bas avec les types de base.
En fait en C, la "case mémoire" est en fait de 1 octet (8bits). Les pointeurs sont en fait des adresses mémoires numérotant les octets en mémoire.

Donc, pour int x, x étant un format int, c'est du 4 octets (32bits). Pour savoir si un bit est à 0 ou 1, il faut faire un masque binaire ET et regarder s'il est à 1 ou 0.
  1. if( (x & 0x04) == 0x04 )
  2. {
  3. // ici le troisième bit (en partant du poids faible) est à 1
  4. }
  5. else
  6. {
  7. // ici le troisième bit (en partant du poids faible) est à 0
  8. }

exemple, si x = 00001111000011110000111100001111
alors (x & 0x04) équivaut à:
00001111000011110000111100001111
ET
00000000000000000000000000000100
=
00000000000000000000000000000100
Expert Programmation

Pour mettre à 1, il faut faire un OU binaire:
  1. x |= (1 << n)


00001111000011110000111100001111
OU
00000000000000000000000000100000
=
00001111000011110000111100101111

Pour mettre à 0 c'est un ET avec l'inverse de la valeur du bit.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde