Javascript错误-左移位返回错误的输出
Javascript bug - Left bit shift returns wrong output
情况如下:
/// 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。
- Datetime格式为Friendly Time.Moment JS输出错误
- 一个ajax循环有两个输出错误innerHTML
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 正则表达式给出错误的输出
- 比较两个值时出现JavaScript输出和控制流错误
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- Jasmine与Jasminece:输出错误到控制台
- 为什么我的Alexa技能测试显示正确的lambda输出,但在开发人员控制台中测试时却给出错误消息
- 使用 json_encode() 和 JSON.parse 后地址数组中的错误输出
- 如何在控制台中防止/捕获http错误输出
- JSMin 错误输出
- Unix 时间戳转换为 JavaScript 的错误输出
- 角度代码覆盖率错误输出
- 断言错误 - 输出有噪音.如何仅显示断言
- HTML javascript函数问题.[object HTMLInputElement]错误输出
- Javascript try-catch错误输出被截断
- Spark 2.0.0 - JSON格式错误输出
- 流星编译-错误输出不显示错误在哪里
- 单元测试错误输出"致命错误:在结束"之后写入
- 返回错误输出的Javascript条件语句