ichirin2501's diary

いっちりーん。

ビット演算の小技

ビット演算の扱いが下手なので、慣れるためにビット演算で遊んだり、小技を集めてみた。
今回は小技のめも。


一番右のビットを0にする
x&(x-1)

一番右の1になってるビットの位置
x&-x

一番右の0になってるビットの位置
-~x&~x

一番右側から連続してる0を1に変える
x|(x-1)

一番右側から連続してる0の部分のマスク
~x&(x-1)

一番右側から連続してる0の数だけ右にシフト
x/(x&-x)

 2^nの値なら1を返す
 !(x&(x-1))&&x

あと、リンクとか。
ビットを数える・探すアルゴリズム
The Aggregate Magic Algorithms