繁体   English   中英

javascript和php之间按位操作结果的差异

[英]Difference in the results of operations bitwise between javascript and php

Javascript代码:

console.log( 1 << 5 );
console.log( 1111044149 << 2 );

Javascript输出:

32
149209300

PHP代码:

var_dump( 1 << 5 );
var_dump( 1111044149 << 2 );

PHP输出:

32
4444176596

为什么1111044149 << 2有PHP和javascript的区别? 我正在为PHP编写一个javascript代码,一切都工作少于那部分,我需要PHP代码显示在javascript中获得的类似结果是完美的。

JavaScript中按位操作的操作数始终被视为int32,而在PHP中则不是这样。 因此,当在1111044149上执行左移时,这发生在JS中:

01000010001110010011000000110101 (original, 32-bit)

00001000111001001100000011010100 (left shifted 2 positions, "01" is truncated)
= 149209300

在PHP中,这些位不会被截断,因为它不被视为32位整数。

感谢您的解释,帮助了我很多,现在我可以创建一个函数来处理这种自动转换,我忘记了32位和64位的细节,因为缺乏关注。

功能

function shift_left_32( $a, $b ) {
    return ( $c = $a << $b ) && $c >= 4294967296 ? $c - 4294967296 : $c;
}

测试

var_dump( shift_left_32( 1, 5 ) );
var_dump( shift_left_32( 1111044149, 2 ) );

产量

32
149209300

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM