10進数を2進数に変換するプログラムで

int b;
for(b=31; b>=0; b--){
printf("%d",(x>>b)&1);
}
"整数xをbビット右にシフトしその結果を1のANDを取ることでxのbビット目が
1か0かがわかる"と本で書かれているのですがこれの意味がいまいちよくわかりません.
なぜこのプログラムで10進数を2進数に変換できるのですか?