Salut à vous!

Voila j'ai en c un petit bout de code tout bête qui a pour but, à partir d'une variable, d'afficher sa valeur en binaire.
Pour ce faire, j'ai une boucle de 32 itérations comme la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
int a = 1;
int i = 0;
 
for(i=31; i >=0; i--){
	printf("%d ", a & (0x1 << i));
}
Cela fonctionne parfaitement mais une chose ne me semble pas claire et j'aimerai que l'on m'explique une chose:

Supposons que ma variable A ait pour valeur 2 soit 10 en binaire.


Arrivé à l'itération ou i vaut 1, j'effectue donc un et logique entre ma valeur 2 et elle même soit 10 & 10 = 10 soit 2 en décimal.

Or quand j'affiche avec mon printf la valeur de retour( a & (0x1 << 1) ), j'obtient bien un 1 (ce qui au final me convient) mais qui ne correspond pas au final à ce que j'estime avoir calculé (la valeur 2).

Quelqu'un pourrait m'expliquer pourquoi cela se comporte ainsi?

Merci pour vos réponses!