BASE 64/32 を 32/64 ビット回転に改訂

2 年前に C++11 で書いた BASE64 と BASE32 エンコーダのビット回転をワード幅でおこなうように改訂しました。 これまでは、 BASE64 で 24 ビットのビット回転をおこなっていました。 そのため、 コンパイラがビット・シフト命令とビット論理和命令を生成していました。 そこで、 ワード幅のビット回転に変更し、 ビット回転イディオムを認識するコンパイラでは、 ビット回転命令を生成させるようにしました。 さほど実行速度の向上にはつながりませんが、 生成されるコードサイズが若干縮まります。

-        u = (u << 16) | (u1 << 8) | u2;
+        u = (u << 24) | (u1 << 16) | (u2 << 8);
         for (int i = 0; i < n; ++i) {
-            u = (u << 6) | (u >> 18);
+            u = (u << 6) | (u >> 26);
             out.push_back (b64[u & 0x3f]);
         }