javascript - << 运算符对大于 32 的移位有什么作用?

标签 javascript node.js

在 Node 环境 | JavaScript 代码:

1 << 33 ===  1 << 1 
// true

我知道数字是以 32 位存储的。它在

0000 0000 0000 0000 0000 0000 0000 0001

之后:<< 33

1 0000 0000 0000 0000 0000 0000 0000 000?

和:

1<< 35 === 1 << 3  

问题:<< 怎么办?运算符(operator)在这里工作?

最佳答案

1) << operators how to work?

您可以找到 << 的定义within the specification (ECMA 262)。

你的问题的关键步骤是:

11) Let shiftCount be the result of masking out all but the least significant 5 bits of rnum, that is, compute rnum & 0x1F.

这意味着第二个操作数不能大于 31 (0x1F)。如果是,则在继续之前通过位掩码减少它:

(33 & 0x1f) === 1 // true

所以:

1 << 33          // becomes...
1 << (33 & 0x1f) // becomes...
1 << 1

2) How is Numbers in the memory to stored?

A number in JavaScript是一个:

primitive value corresponding to a double-precision 64-bit binary format IEEE 754-2008 value

关于javascript - << 运算符对大于 32 的移位有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275040/

相关文章:

node.js - 路由是在 AngularJS 中通过 HTML 提供 JS 文件

javascript - 从稍微嵌套的数组中删除重复项后保留对象的所有键

javascript - 在固定高度内显示尽可能多的文本

javascript - 之前在 Javascript 中未定义

node.js - momentjs 返回的日期错误

node.js - ReactDOM.render 不渲染组件

javascript - 比较两种加载本地 jQuery 库的回退机制方法

php - SWFUpload 是否可以将多个文件上传到单个 php 脚本执行

javascript - 是否可以在浏览器关闭之前进行跟踪?

javascript - 使用 mongoDB 和 mongoose 获取附近的地点