>>486
ありがとうございます
ビット演算については分かってるつもりだったのに全然でした・・・
ヒントを貰って下のようなプログラムを試してみたら
確かに最下位ビットが順に消えていって感動です

uint n = 4649;
while (n > 0)
{
  Console.WriteLine(Convert.ToString(n, 2));
  n = n & n - 1;
}

【実行結果】
1001000101001
1001000101000
1001000100000
1001000000000
1000000000000

でも結局n = n & n - 1;で最下位ビットが消える理由が
理解できていないのでもう少し考えてきます