もんすごい小ネタ
タイトルの通り、32bitの左シフトをエミュレーションしたくて方法を探していたときに、下記のサイトを見つけました。
http://www.rizalalmashoor.com/blog/php-32-bit-left-shift-function
得られる結果は良いのですが、decbinで文字列化して処理してるのでとても遅い。
そもそもこれbit演算でできるじゃん、ってことで書き換えました。
function leftshift32($number, $steps)
{
$number = $number << $steps & 0xFFFFFFFF; // シフトした上で32bit範囲を超える上位ビットを破棄
return ($number & 0x80000000) // 符号ビットが0でなかったらマイナス値
? ($number | 0xFFFFFFFF00000000) // 64bitでのマイナス表現に
: $number;
}
実行時間的には1/6ぐらい。