案例如下:
/// returns 406913024, but should 417018740736
alert(6363201 << 16);
有什么问题?我在ruby中尝试了相同的操作,并返回正确的值(http://www.miniwebtool.com/bitwise-calculator/bit-shift/?data_type=10&number=6363201&place=16&operator=Shift+Left)
答案 0 :(得分:4)
该运算符将第一个操作数移位指定的位数 左边。向左移位的多余位被丢弃。零位 从右边移入。
移位运算符将其操作数转换为32位整数 big-endian顺序并返回与左边相同类型的结果 操作数。右操作数应小于32,但如果不是 将使用低五位。
6363201
的二进制文件为11000010001100001000001
。
当您离开6363201 << 16
时,它变为417018740736
,二进制为110000100011000010000010000000000000000
现在,保留了最低有效位的32位,保留的实际位为00011000010000010000000000000000
,对应406913024
答案 1 :(得分:2)
在JavaScript中,您正在处理32位数字。
6363201 << 16
会产生110000100011000010000010000000000000000
,其中 39 位。从第一个 7 位开始(因为你从右向左移动,你最终得到00011000010000010000000000000000
,其中一个(二进制)parseInt
会显示你是 406913024 ,而非417018740736。