LoginSignup
5
5

More than 5 years have passed since last update.

PHP7調査(3)整数キャストとシフトの仕様整理

Last updated at Posted at 2014-10-04

PHP7に採用される予定の修正のうち、次のRFCの内容を紹介します。

修正その1

浮動小数点数のNaN、INF、-INFの3つを整数にキャストすると今までは環境依存だったのが(Cの仕様としてキャスト結果が不定)、PHP7から0になるようになりました。

<?php
var_dump((int)INF); // PHP7からはint(0)

誰得な変更ですね。

修正その2

負の右シフト・左シフトが禁止されました。

<?php
var_dump(4<<-1);

実行すると次のようにWarningが出てfalseが返ってきます。

PHP Warning:  Bit shift by negative number in /private/tmp/foo.php on line 2
bool(false)

Cでも結果は不定になるはずなので、今まで認められていたのが少し変だったと言えます。とはいえ、今まで動いていたコードが動かなくなることがあるかもしれません。

修正その3

整数のビット幅を超える数のシフト結果は0(負の数に対する右シフトの場合だけ-1)になります。

<?php
var_dump(4<<64); // PHP7ではint(0)

Intel系CPUではシフト幅の指定がビット幅を超えた場合には「回り込み」が起こるようです。つまり、65bitシフトを指定すると1bitシフトの意味になるそうです。しかし、これはCPU依存の挙動なので修正したということのようです。

5
5
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
5
5