问一个基础问题, 1<< 31为什么是负数, Math.pow(2, 52) 这个就是正数

kis龍 2019-06-23 09:37:24
按理说 js 数字 要 > 2^32 次幂, 为啥 1<< 31 就是负,

Number.MAX_SAFE_INTEGER = 9007199254740991 也 远大于 2^32 次幂
...全文
595 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kis龍 2019-07-28
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
<<是位运算符。js中的位运算只支持32位的整数。范围是 -2147483648 到 2147483647。 32位的整数的二进制的最高位(也就是第32位)存放的是符号位, 正数为0, 负数为1。 就是说二进制的 0000 0000 0000 0000 0000 0000 0000 0000 到 0111 1111 1111 1111 1111 1111 1111 1111 是正数 1000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 是负数 1<<31 的结果是 1000 0000 0000 0000 0000 0000 0000 0000 也就是负数了
明白了 重点是这句, js中的位运算只支持32位的整数, 4*8bit
kis龍 2019-07-28
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
<<是位运算符。js中的位运算只支持32位的整数。范围是 -2147483648 到 2147483647。 32位的整数的二进制的最高位(也就是第32位)存放的是符号位, 正数为0, 负数为1。 就是说二进制的 0000 0000 0000 0000 0000 0000 0000 0000 到 0111 1111 1111 1111 1111 1111 1111 1111 是正数 1000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 是负数 1<<31 的结果是 1000 0000 0000 0000 0000 0000 0000 0000 也就是负数了
Math.pow(2, 52);// 4503599627370496, 明显 大于 2^32 typeof Math.pow(2, 52) ; // "number" js 不应该是 32位的, 还支持更多的, 为什么???
天际的海浪 2019-06-23
  • 打赏
  • 举报
回复
<<是位运算符。js中的位运算只支持32位的整数。范围是 -2147483648 到 2147483647。 32位的整数的二进制的最高位(也就是第32位)存放的是符号位, 正数为0, 负数为1。 就是说二进制的 0000 0000 0000 0000 0000 0000 0000 0000 到 0111 1111 1111 1111 1111 1111 1111 1111 是正数 1000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 是负数 1<<31 的结果是 1000 0000 0000 0000 0000 0000 0000 0000 也就是负数了

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧