2011-03-24 68 views
1

看看下面的代碼片段:爲什麼'<<'運算符有時在Javascript和PHP中表現不同?

<script> 
var x = 25; 
document.write(x << 9); 
</script> 

<?php 
$x = 25; 
echo ($x << 9); 
?> 

此輸出:12800 12800
確定。正常爲止......現在讓我們試試這個:

<script> 
var x = 12345678; 
document.write(x << 9); 
</script> 

<?php 
$x = 12345678; 
echo ($x << 9); 
?> 

這一次的輸出2026019840 6320987136

爲什麼是後兩個值不同?而且,最重要的是(對我而言),我如何讓PHP實現來執行Javascript實現?換句話說,我希望我的PHP代碼輸出2026019840而不是6320987136

+3

它們不同,因爲PHP自動轉換爲一個很長的,就像Python一樣。而不是給你低32位。 – 2011-03-24 04:59:22

+0

精彩!所以,如果我只是&0xFFFFFFFF的價值,我得到了PHP所需的價值。你能否提出這個答案,我可以接受? – Mala 2011-03-24 05:00:49

回答

3

使用(x << 9) % 0x100000000或其等價的PHP。 (或你剛剛說的)

1

PHP給你一個64位的結果。 Javascript只是給你低32位。如果你在PHP中使用(x << 9) & 0xFFFFFFFF,你會得到低32位。

雖然您可能遇到符號位問題。嘗試(23456789 << 9)

相關問題