首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么>>> 100不能在JavaScript中产生0?

为什么>>> 100不能在JavaScript中产生0?
EN

Stack Overflow用户
提问于 2013-11-07 00:00:17
回答 2查看 94关注 0票数 2

所以我在操控台上玩轮班,结果让我很困惑。

输入:

代码语言:javascript
复制
a = -1
a >>> 100

输出:

代码语言:javascript
复制
268435455

我看了一下关于它的Mozilla参考页面,但是它没有提到大量转移时>>>的行为。我以为用零填充把所有的位都移到右边会导致零。

这是Firefox中的bug还是什么的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 00:08:24

看来你最多只能移动31次。

来自您在帖子中链接的站点(MDN):

将二进制表示中的a向右移动b (< 32)位,丢弃移出的位,左移为零。

来自实际规范(第77页)

设shiftCount是掩蔽除最不重要的5位rnum之外的所有结果,即计算rnum & 0x1F。

实际发生的情况是,当你移动到100时,它会被(100 & 0x1F)或4移动。

-1 >>> 100 === -1 >>> 4

如果你要把它分成几个轮班,那么它会起作用的:

-1 >>> 25 >>> 25 >>> 25 >>> 25 === 0

票数 3
EN

Stack Overflow用户

发布于 2013-11-07 00:09:43

任何在位算子中的Number上的Number都会将其操作数转换为32位大端有符号数字。

这意味着,如果数字大于可以存储的32位,它将被截断。大端指的是从左到右读取数字时按自然顺序存储的数字,即先存储更多的有效数字,因此,如果数字存储在一个字节以上,其第一个字节就更有意义。

这意味着-1的二进制表示将是..。

代码语言:javascript
复制
11111111 11111111 11111111 11111111

(这里是-1 in 二补。这是通过计算二进制数的值来执行的,然后翻转每一个位并添加一个。)

当你在100换班的时候,你会发现它是4,留给你的.

代码语言:javascript
复制
00001111 11111111 11111111 11111111

正如您所看到的,高位不再是设置的,所以它不是负的,它实际上是268435455 (来自您的问题中的数字)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19825435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档