Javascript错误-左移位返回错误的输出

Javascript bug - Left bit shift returns wrong output

本文关键字:错误 输出 返回 左移 Javascript      更新时间:2023-09-26

情况如下:

/// returns 406913024, but should 417018740736
    alert(6363201 << 16); 

怎么了?我在ruby中尝试了同样的操作,它返回了正确的值(http://www.miniwebtool.com/bitwise-calculator/bit-shift/?data_type=10&数字=6363201&place=16&operator=Shift+Left)

MDN Left Shift Operator 报价

此运算符将指定位数的第一个操作数移位到左边。向左偏移的多余比特被丢弃。零位从右边移进来。

引用Bitwise Shift Operators

Shift运算符将其操作数转换为中的32位整数big-endian顺序,并返回与左边相同类型的结果操作数。右侧操作数应小于32,但如果不是将使用低五位。

6363201的二进制为11000010001100001000001

当你左移6363201 << 16时,它变成417018740736,在二进制中是110000100011000010000010000000000000000

现在,保留了最低有效位的32位,保留的实际位是00011000010000010000000000000000,对应于406913024

在JavaScript中,您处理的是32位数字。

6363201 << 16导致110000100011000010000010000000000000000,其为39位。去掉前7位(因为您从右向左移动,所以最终会得到00011000010000010000000000000000,其中的(二进制)parseInt将显示为406913024,而不是417018740736。