javascript - 2的补码和IEEE754有什么关系?
问题描述
我曾经认为所有数字都以 2 的补码格式存储在计算机中。并且 2 的补码中没有 -0。但在 IEEE754 中,既有 +0 又有 -0。我在 JavaScript 中读到,所有数字都是 IEEE754。所以现在我很困惑。更重要的是,在 JavaScript 中,~a = -a -1。我以前以为是数字a的2补码变化引起的。但是如果 JavaScript 中的每个数字都存储为 IEEE754,我们如何将其转换为 2 的补码呢?
解决方案
JavaScript 秘籍:它使用 IEEE-754 基本 64 位二进制浮点格式表示数字,但将它们转换为 32 位整数以进行按位运算,然后再将它们转换回来。
JavaScript 是 ECMAScript 的一个实现。ECMAScript 2018 语言规范(第 9版,2018 年 6 月)在第 12.5.8 条中指定了一元运算符(在目录中显示为 12.5.10,但在文本中显示为 12.5.8!)。~
相关部分是:
一元表达式 : ~ 一元表达式 1. 令 expr 为计算 UnaryExpression 的结果。 2. 让 oldValue 为 ? ToInt32(?GetValue(expr))。 3. 返回对 oldValue 应用按位补码的结果。结果是一个有符号的 32 位整数。
该ToInt32
操作将数字截断为整数(删除任何小数部分,向零舍入),然后将数字映射到模 2 32的区间 [-2 31 , +2 31 ) 。
推荐阅读
- exist-db - eXist-db范围索引中条件组合索引失败
- java - 如何在注销时使记住我无效?
- c# - 等待输入完成并触发一次 OnChange
- docker - 您可以使用 docker-machine 配置物理主机吗?
- python - python spyder编辑器更改菜单和字体大小
- isabelle - 如何为 less_eq 操作生成代码
- oracle - Oracle 存储过程在 SSRS 查询设计器中不起作用
- docker - 适用于 Windows Server 2012 R2 的 Docker
- c++ - 使用声明为“static const”的 QRegExp 对象是否安全?
- php - 教义关系养孤儿