javascript - 位符号符号是如何工作的~
问题描述
所以,我查看了几个网站,仍然不明白按位运算符 ~ 的作用。基本上,我知道对于像 4 这样以二进制表示为 100 的数字,当您将 ~4 放入 011 时应该翻转;但是,似乎以某种方式变成了-5,然后教程说了一些关于负载为负数的 32 位表示。在这一点上,我完全迷失了,请解释一下 ~ 是如何工作的。
解决方案
数字 4 不是100
。是00000000000000000000000000000100
。所有这些零都被翻转为 1 ~
。
结果数字是负数,因为这些 32 位值在转换回普通 JavaScript 数字时是如何解释的。但是我已经超前了:JavaScript 中的位运算符所做的第一件事就是从源编号创建一个临时的32 位整数值。然后,运算符会发挥它的魔力,在这种情况下,~
就是反转该 32 位值的所有位。然后将数字转换回 64 位双精度浮点值,这是普通的 JavaScript 数字类型。
32 位值被解释为有符号值,这与计算机算术的工作方式有关。可以说,任何最左边(最高有效)位为 a 的 32 位值都1
被解释为负值。
二进制数学和现代计算机(嗯,几乎所有历史计算机也是)的方式是一个广泛的主题。一些编程语言提供的抽象大多隐藏了计算硬件实际工作的现实;在大多数实现中,JavaScript 并不是真正的那些语言之一。
推荐阅读
- qt - 在 qml 中创建相同的选项卡和加载屏幕
- mysql - 并行 API 调用读取一行并根据获取的结果更新它,在 mysql 中,导致竞争条件
- reactjs - 请求的资源上不存在“Access-Control-Allow-Origin”标头。三.js
- c# - Visual Studio 安装项目 - 生成的安装程序有问题
- android - 如何在 Android Studio 中使用带有多个 LinearLayout 的字符串数组
- amazon-web-services - 我将如何使用 AWS 在特定日期和时间触发代码?
- java - 程序在 Java 中运行时如何插入 GUI 元素?
- reactjs - 来自基本类型的 TypeScript 类型 - 默认所有属性都是可选的,除非明确要求或排除
- django - 算forengkey django rest框架?
- go - 无法将多个文件写入 Zip 文件