1

32 ビット マシンで << を実行する必要があり、その数がすでにかなり大きいという問題に直面しています。この大きな数にシフトすると、答えが間違っています。これを乗り越える方法はありますか?

ラップトップが Windows7 64 ビットを実行していることは確かですが、PHP_INT_MAX は 2147483647 を生成します。64 ビットを使用するように php を設定する方法はありますか? このラップトップで XAMPP サーバーを実行していますが、数値を少しシフトする必要があります。数値が何度もシフトされると、間違った答えが得られます。

前もって感謝します。ジャック

4

2 に答える 2

1

参考書より

整数のサイズはプラットフォームに依存しますが、最大値は約 20 億が通常の値です (符号付き 32 ビット)。通常、64 ビット プラットフォームの最大値は約 9E18 です。PHP は符号なし整数をサポートしていません。PHP 4.4.0 および PHP 5.0.5 以降では、整数サイズは定数 PHP_INT_SIZE を使用して決定でき、最大値は定数 PHP_INT_MAX を使用して決定できます。

いいえ、64ビットを使用するように設定することはできません。

GMP機能が必要なようです。誰かがこのページに、ビットごとのシフトを行うためのヒントを投稿しました。

また、ビットごとのシフトを行いたい場合は、非常に簡単です。左にシフトするには、数値に pow(2,x) を掛け、右にシフトするには、pow(2,x) で割ります。

<?php 
function gmp_shiftl($x,$n) { // shift left 
  return(gmp_mul($x,gmp_pow(2,$n))); 
} 

function gmp_shiftr($x,$n) { // shift right 
  return(gmp_div($x,gmp_pow(2,$n))); 
} 
?> 
于 2013-01-03T04:03:56.380 に答える
0
function logical_right_shift( $val , $shft ) {
    return floor(($val / pow(2,$shft)));
}

function logical_left_shift( $val , $shft ) {
    return ($val * pow(2,$shft));
}   
于 2015-11-03T08:54:40.563 に答える