我遇到了需要在32位機器上執行< <的問題,而且這個數字已經很大了。如果我在這個大數字上轉換,答案是不正確的,我可以通過任何方式來解決這個問題?PHP在32位左移位問題
我敢肯定,筆記本電腦運行Windows7 64位,但PHP_INT_MAX產生2147483647.有什麼辦法可以設置PHP使用64位?我在這檯筆記本電腦上運行XAMPP服務器,並且我必須對數字進行一些轉換,如果數字轉移太多,我會得到不正確的答案。
在此先感謝。 傑克
我遇到了需要在32位機器上執行< <的問題,而且這個數字已經很大了。如果我在這個大數字上轉換,答案是不正確的,我可以通過任何方式來解決這個問題?PHP在32位左移位問題
我敢肯定,筆記本電腦運行Windows7 64位,但PHP_INT_MAX產生2147483647.有什麼辦法可以設置PHP使用64位?我在這檯筆記本電腦上運行XAMPP服務器,並且我必須對數字進行一些轉換,如果數字轉移太多,我會得到不正確的答案。
在此先感謝。 傑克
的整數的大小是依賴於平臺的,雖然約兩十億的最大值是通常的值(這是32位帶符號的)。 64位平臺的最大值通常約爲9E18。 PHP不支持無符號整數。整數大小可以使用常量PHP_INT_SIZE確定,最大值使用自PHP 4.4.0和PHP 5.0.5以來的常量PHP_INT_MAX。
所以不,你不能將它設置爲使用64位。
看起來好像GMP functions可能是你需要的。有人發佈了一個尖上this page做按位與他們轉移:
此外,對於那些誰願意做按位轉移,這是相當簡單的。要左移,只是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)));
}
?>
function logical_right_shift($val , $shft) {
return floor(($val/pow(2,$shft)));
}
function logical_left_shift($val , $shft) {
return ($val * pow(2,$shft));
}
你打我吧。我打算說同樣的事情,代之以展示[bcmath](http://php.net/manual/en/book.bc.php)代碼示例。 – PleaseStand
我不知道這將如何幫助我?如果我限於32位,我打電話: $ bitString = $ bitString << 5; 其中$ bitString是10183165152我幾乎卡住了?我在你的建議中遺漏了什麼? –
你會使用GMP數字,這是任意的精度,而不是PHP的固定大小整數。您可以使用[GMP init](http://php.net/manual/en/function.gmp-init.php)創建GMP編號。另外,正如@PleaseStand建議的那樣,你也可以使用bcmath來完成同樣的事情,因爲它也提供了任意的精確數學。 –