2013-06-12 59 views
0

PHP中如何邏輯AND兩個浮點值(v5.4.3)?PHP中的邏輯AND兩個浮點值(32位)

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

以上將始終顯示爲0,但實際上應該顯示4294967296 我也曾嘗試「的setType」所有變量浮動,但具有相同的結果。

如果相關,那麼它在運行IIS 7.5的64位Windows 2008 R2服務器上運行,而PHP是32位。

+0

我不確定是否在浮點數上定義了邏輯「AND」。你是否期待一個結果,就好像它們是整數一樣,或者因爲它們的二進制表示是按位「AND」的? –

+0

@Joachim - 我期望它返回4294967296而不是0. – DHS

+0

'&&'也許,不是'&'用於[*邏輯*](http://php.net/manual/en/language.operators.logical。 PHP)'AND'? – BlitZ

回答

1

&運算符首先將其參數轉換爲整數,然後執行操作。換句話說,你的浮點數立即轉換回整數。

4294967296澆鑄到一個32位整數溢出到0,所以&運算的結果是0。

如果你在64位機器上運行,該值在64位整數配合和給出了預期的結果,4294967296.

編輯:如果你需要比機器的「位」更多的位精度,你可以用GMP編譯PHP並使用這些函數。

+0

我在64位機器上運行,但是因爲PHP是32位(Windows沒有64位),所以我總是得到0。是否有其他方法設置此值爲0(我只是需要**而不是**爲0)? – DHS

+0

@ user2028935如果您需要比機器的「位數」更多的精度,您可以使用[GMP](http://www.php.net/manual/en/ref.gmp.php)編譯PHP並使用這些功能。 –

+0

Joachim - 請建議這是一個答案,因爲它對我來說非常合適。 – DHS

相關問題