私は次の関数を持っています.witchは整数(10進数)を取得し、それを2進数に変換した後にこの整数の1の数を返します(たとえば、6を渡すと、10進数の6は2進数の110に等しいため、関数は2を返します) . それはいいことですが、残念ながら私はそれがどのように機能するのか理解できません。コードは次のとおりです。
int number_of_ones(int i){
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
それがどのように機能するかを私に説明できる人はいますか?