Pointeur et adressage en C++

wafa84 -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
comment savoir le nombre de bits sur lesquels la variable x s'étend?
sizeof x;// donne la taille en octet
comment accéder à un bit particulier de la variable x?
par masquage :
x & 4;
4 a pour code binaire 100, donc tu ne conserves que le 3ème bit.
0
wafa84
 
je veux pas conserver que le 3ième bit, mais je veux accéder à ce bit et changer sa valeur tout en conservant le reste des cases, pour cela il faut utiliser le pointeur p, mais je sais pas exactement comment.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
changer sa valeur reviens à la regarder à la tester et à la modifier.
if(x& 4 ) x-=4;//met le 3ème bit de 1 à 0
else /* if x&4==0*/ x+=4;//met le 3éme bit à 1.
Avec les pointeurs ce n'est pas possible car tu accede à des champ de minimum un octet.
une solution serai de faire une structure :
struct X{
int x1:1;
int x2:1;
...
int x32:1;}
mais je ne sasi plus si c'est en bit ou aussi en octet.
Ensuite en faisant un pointeur sur cette structure en en castant sur x, tu pourra peut être accéder à chaque bit avec le pointeur.
0
wafa84
 
le but est de trouver une méthode pour parcourir les bits d'une variable bit par bit peu importe le size de cette variable, bien sur cette variable est de type int et non pas un vecteur de bits
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je viens de t'en donnée deux des méthodes. Les pointeurs accèdent à la mémoire par paquet d'octet, pas de bit.
sizeof (void*) = 4 octet= 4*8 =32 bits (si tu est en 32 bits)
et lorsque tu fait :
void* x;
x est l'adresse d'un octet.
0