首页 > 解决方案 > 位符号符号是如何工作的~

问题描述

所以,我查看了几个网站,仍然不明白按位运算符 ~ 的作用。基本上,我知道对于像 4 这样以二进制表示为 100 的数字,当您将 ~4 放入 011 时应该翻转;但是,似乎以某种方式变成了-5,然后教程说了一些关于负载为负数的 32 位表示。在这一点上,我完全迷失了,请解释一下 ~ 是如何工作的。

标签: javascriptnode.jsalgorithmfrontendbitwise-operators

解决方案


数字 4 不是100。是00000000000000000000000000000100。所有这些零都被翻转为 1 ~

结果数字是负数,因为这些 32 位值在转换回普通 JavaScript 数字时是如何解释的。但是我已经超前了:JavaScript 中的位运算符所做的第一件事就是从源编号创建一个临时的32 位整数值。然后,运算符会发挥它的魔力,在这种情况下,~就是反转该 32 位值的所有位。然后将数字转换回 64 位双精度浮点值,这是普通的 JavaScript 数字类型。

32 位值被解释为有符号值,这与计算机算术的工作方式有关。可以说,任何最左边(最高有效)位为 a 的 32 位值都1被解释为负值。

二进制数学和现代计算机(嗯,几乎所有历史计算机也是)的方式是一个广泛的主题。一些编程语言提供的抽象大多隐藏了计算硬件实际工作的现实;在大多数实现中,JavaScript 并不是真正的那些语言之一。


推荐阅读