石(掘る猫の)Blog

一割の情報、九割の水増し

目次

Blog 利用状況

ニュース

Twitter ID -> maincat

書庫

黒龍さんのロジックが分からない

コレです。初めて目にしてからはや一週間、かけらも進展が見られません。
ビット操作系で見当が付かないときは、ともかく図示が王道といいます。
ぶっちゃけ面倒Дですが、すでに方策を選んでいる余裕など一切なし。

黒龍ロジック
 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の場合

image

image

…0x80000000の場合はかろうじてどういう動きをするか分かりますが、
0x11111111については…分かるような分からないような。図が悪いのか、
頭が悪いのか。根底にすご~く単純な思想がありそうに思えつつまったく
見当がつかない歯がゆさ。


黒龍教経文
 ・立ってるビットを数えてそれが 1  なら 2 の乗数って判定をやってるだけ。
 ・1bit と言うのはそれ自身で立ってる数と=になります。0 or 1 ね。
 ・2bit 毎に区切ってマスクしてやることでさっきと同じようにビットが立っているかどうかをあらわせます。
 ・[N|T] こうね。で、Nの箇所も同様に判定するために右にずらしてから同じようにマスクこれで [T|N] Tに当たる箇所を取り出したことになります。右がわと左側ね。で、これらを足してやることで立っているビット数が [NN] として格納されるわけです。(わからなーいー)
 
・あとはこれを同じように 4bit 毎、 8bit 毎とやっていくことで計算できます。

現在写経中。

投稿日時 : 2008年7月25日 22:16

コメントを追加

# re: 黒龍さんのロジックが分からない 2008/07/25 23:15 dolan

1行目は2ビットだけ、2行目は4ビットだけに注目するとわかりやすいと思います。

# re: 黒龍さんのロジックが分からない 2008/07/26 7:17 774RR

二進数2桁(2bit)があるとき、それが○△であるなら
○=0か1 △=0か1 以外はありえない
1であるビットの数は○+△(解は0~2なので2ビットに収まる)
○=n>>1 △=n&1
これをすべての桁(32bit)に対して行うにはどうすればよいか
これが1行目のアルゴリズム

2bitが納得できたのなら4bitを考える
4bitの上半分にはその2bit中にあった1の数
4bitの下半分にはその2bit中にあった1の数
であるわけでこの両者を加えると4bit中にあった1の数
2行目以後はこれだ

# re: 黒龍さんのロジックが分からない 2008/07/29 1:14 石掘る猫

>dolanさん
>774RRさん
…な、なるほどぉおぉお。ようやくマスクが変な
ビット配列になっているのか理解できましたぁあ。
そんな発想わからNAI( TДT<むりむりむりぃ。
ありがとうございました!

どう絵にしたら分かりやすくなるかなぁ…。

# JtItrlvUBbbWMveAg 2011/12/13 20:50 http://www.drinkershealth.net/naltrexone-revia/

The text is promising, will place the site to my favorites..!

タイトル
名前
URL
コメント