1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

64bit環境のPHPで32ビットシフトしたことにする

Last updated at Posted at 2015-07-04

もんすごい小ネタ

タイトルの通り、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ぐらい。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?