Se connecter / S'enregistrer
Votre question

Pointeur et adressage en C++

Tags :
  • Mémoires
  • Programmation
Dernière réponse : dans Programmation
18 Novembre 2009 12:31:38

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

a b L Programmation
18 Novembre 2009 20:29:55

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
m
0
l
25 Novembre 2009 09:35:01

bonjour , merci de ta réponse :) , mais ce que je veux n'est pas savoir si un bit est à 1 ou bien à 0 , mais forcer un bit particulier de cette variable à 1 ou bien à 0, alors comment faire ?!
merci encore
m
0
l
a b L Programmation
25 Novembre 2009 19:38:02

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.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS