bit flip

bitパターンを左右反転させる華麗な方法はないもんでしょうか。

x = ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1);
x = ((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2);
x = ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4);
x = ((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8);
x = ((x & 0xffff0000) >> 16) | ((x & 0x0000ffff) << 16));

これを高速にしたい。これ、任意の行を入れ替えても正しく動作するっぽい(要確認)んだけど、それを元にうまく高速化できないかなぁ。ていうか既に暁のコーダ部屋とか、その辺の超絶サイトで考察しつくされてそうだけど。明日以降調べてみよう。

追記: byte単位まで持ち込んだらbswapしてみると良いかも(要ベンチ)