-2

私は次の関数を持っています.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;
}

それがどのように機能するかを私に説明できる人はいますか?

4

1 に答える 1

2

1になったビット数を分岐せずにカウントするアルゴリズムです。ここで説明します:

http://graphics.stanford.edu/~seander/bithacks.html

于 2013-02-12T21:17:56.847 に答える