0

PHP (v5.4.3) で 2 つの float 値の論理 AND を行うにはどうすればよいですか?

$a = 16710107135;
$b = 4294967296;
$result = (float)$a & (float)$b;
echo $result;

上記は常に 0 を表示しますが、実際には 4294967296 を表示する必要があります。また、すべての変数を float に「settype」しようとしましたが、結果は同じでした。

関連する場合、IIS 7.5 を搭載した 64 ビットの Windows 2008 R2 サーバーで実行されており、PHP は 32 ビットです。

4

1 に答える 1

1

&オペレーターは、最初にパラメーターを整数に変換してから、操作を実行します。つまり、浮動小数点キャストはすぐに整数に変換されます。

4294967296 を 32 ビット整数にキャストするとオーバーフローして 0 になるため、&演算の結果は 0 になります。

64 ビット マシンで実行している場合、値は 64 ビット整数に収まり、期待される結果 4294967296 が得られます。

編集:マシンの「ビット数」よりも多くの精度が必要な場合は、GMPを使用して PHP をコンパイルし、それらの関数を使用できます。

于 2013-06-12T06:27:56.063 に答える