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依存の挙動なので修正したということのようです。