2017-02-11 62 views
2

之间的不同在Javascript中为什么左移是PHP和JavaScript

p = 105874240; 
105874240 
p << 5; 
-906991616 

但在PHP

php > echo $p = 105874240; 
105874240 
php > echo $p << 5; 
3387975680 

我搜索一些介绍一下不同的,因为JavaScript中使用签署INT32。 但我找不到合适的解决方案,都不适合我。

你能告诉我发生了什么事吗?我怎样才能在PHP中获得相同的Javascript结果。谢谢。

+0

看看这个http://stackoverflow.com/questions/1908492/unsigned-integer-in-javascript你需要使用'>>>'操作符来转换为js中的32位无符号整数。 – steven

+0

我的意思是Javascript的结果是正确的,我想PHP得到相同的结果,而不是改变Javascipt。 –

+0

你知道有符号和无符号整数之间的区别,以及如何告诉操作系统使用哪一个和何时使用? – Mjh

回答

0

这就是我该怎么做的。

function to32bits($value) 
{ 
    $value = ($value & 0xffffffff); 
    if ($value & 0x80000000) $value = -((~$value & 0xffffffff) + 1); 
    return $value; 
} 

$p = 105874240; 
echo to32bits($p << 5); // -906991616 
+0

真棒,这是我的工作,非常感谢:) –

+0

不客气@TonyGao –