首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript (Math.pow(2,31) | 0)产生负数

问Javascript (Math.pow(2,31) | 0)产生负数
EN

Stack Overflow用户
提问于 2017-05-18 13:31:42
回答 1查看 2.5K关注 0票数 1

在JS中,位运算符只为32位数字定义,安全范围是Math.pow(-2,31)到Math.pow(2,31)-1。

并且可以使用| 0将一个数字强制转换为32位有符号整数

所以我在Chrome的控制台上测试了一下:

代码语言:javascript
复制
Math.pow(2,30) | 0
1073741824
Math.pow(2,31)
2147483648
Math.pow(2,31) | 0
-2147483648
Math.pow(2,32) | 0
0

为什么一个正数是逐位的,或者0会导致一个负数?

EN

回答 1

Stack Overflow用户

发布于 2017-05-18 13:38:46

在按位运算中,javascript使用32位整数进行操作。它的最大值是2147483647,所以当你超过这个数字时,会变成一个负值。如果你在java中做这样的事情:

代码语言:javascript
复制
int x = 2147483647;
x++;

结果是-2147483648,这在javascript中是相同的。执行Math.pow(2,31) | 0时超出了整数的最大大小。

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

https://stackoverflow.com/questions/44039331

复制
相关文章

相似问题

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