コレです。初めて目にしてからはや一週間、かけらも進展が見られません。
ビット操作系で見当が付かないときは、ともかく図示が王道といいます。
ぶっちゃけ面倒Дですが、すでに方策を選んでいる余裕など一切なし。
黒龍ロジック
1.調査値とマスクの論理積を取る
2.調査値を1ビット右シフトした値とマスクの論理積を取る
3.上記1.と2.の結果の論理和を取る
4.マスクを取りかえ上記1.に戻る
5.上記1.~4.を5回(32bitの場合)繰り返す(毎回上記2.のシフト幅を*2する)
以上を表にあらわす。最上段を調査値とし、緑の上記1.~4.を緑の敷居で
区切っている。表の構成は以下のとおり。
・マスク
・マスクの論理積(上記1.)
・調査値の1ビット右シフト値
・調査値の1ビット右シフト値とマスクの論理積(上記2.)
・上記1.と2.の結果の論理和(上記3.)
| 0x11111111の場合 | 0x80000000の場合 |
|
| 
|
…0x80000000の場合はかろうじてどういう動きをするか分かりますが、
0x11111111については…分かるような分からないような。図が悪いのか、
頭が悪いのか。根底にすご~く単純な思想がありそうに思えつつまったく
見当がつかない歯がゆさ。
黒龍教経文
・立ってるビットを数えてそれが 1 なら 2 の乗数って判定をやってるだけ。
・1bit と言うのはそれ自身で立ってる数と=になります。0 or 1 ね。
・2bit 毎に区切ってマスクしてやることでさっきと同じようにビットが立っているかどうかをあらわせます。
・[N|T] こうね。で、Nの箇所も同様に判定するために右にずらしてから同じようにマスクこれで [T|N] Tに当たる箇所を取り出したことになります。右がわと左側ね。で、これらを足してやることで立っているビット数が [NN] として格納されるわけです。(わからなーいー)
・あとはこれを同じように 4bit 毎、 8bit 毎とやっていくことで計算できます。
現在写経中。