タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

csharpとこれはすごいに関するraituのブックマーク (1)

  • 一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録

    一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、

    一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録
    raitu
    raitu 2009/07/05
    黒魔術アルゴリズム//x&-xで立っている右側のビットだけ残して0にしてしまう(黒魔術)//0x03F566ED27179461という値を掛け合わせ6bitを取り出すことで64bitのどこが右端かを検出出来る。これはすげえな。
  • 1