5

PHP の左シフト関数の動作について非常に混乱しています。私は2つの異なるマシン(開発とホスティング)でそれを使用していますが、彼らは私に異なる答えを与えています. 私はこの計算にそれを追跡しました:

(-3941404251) << 5;

あるマシンでは、答えは -1570884448 です。どちらのシステムでも、PHP_INT_MAX = 2147483647 です。後者は 32 ビット システムで、最初のシステムは 64 ビットですが、php は 32 ビット プロセスとして実行されており、同じ答えが得られます。

これは 32 ビットと 64 ビットの問題だとしか思えませんが、目的の動作を実現する簡単な方法はありますか。誰かが私に関数か何かを教えてくれたら、それは素晴らしいことです.

ありがとう!

4

3 に答える 3

2

最初の値は、問題の正解です。公式マニュアルによると、max_int より大きい数値にはビット演算子を使用できません。したがって、GMP 関数 (たとえばhttp://www.php.net/manual/en/function.gmp-and.php ) を使用してみて、数値を文字列として扱います。

于 2010-02-21T14:42:15.420 に答える
1

マシンは同じバージョンの PHP を実行していますか? (-3941404251) はすでに 32 ビットの符号付きの値には大きすぎるため、「正しい」結果は定義されておらず、異なるバージョン/コンパイルなどで異なる結果が得られても、バグとは見なされないのではないかと思います。

于 2010-02-21T13:24:37.820 に答える