为什么按位“非1”等于-2?

2024-01-01

假设我们有1这个以 2 为基数的数字是:

00000000000000000000000000000001

现在我想翻转所有位以获得以下结果:

11111111111111111111111111111110

据我所知,解决方案是使用~(按位非运算符)翻转所有位,但结果~1 is -2:

console.log(~1); //-2
console.log((~1).toString(2)); //-10 (binary representation)

为什么我会得到这个奇怪的结果?


之间有2个整数1 and -2: 0 and -1

1   in binary is 00000000000000000000000000000001
0   in binary is 00000000000000000000000000000000
-1 in binary is 11111111111111111111111111111111
-2 in binary is 11111111111111111111111111111110
("binary" being 2's complement, in the case of a bitwise not ~ )

正如你所看到的,这并不奇怪~1 equals -2, since ~0 equals -1.

As @Derek https://stackoverflow.com/users/283863 解释了 https://stackoverflow.com/questions/31377474/why-does-bitwise-not-1-equal-2/31377545#comment50734070_31377545, These 按位运算符 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators将它们的操作数视为 32 位序列。parseInt,另一方面,则不然。这就是为什么你会得到一些不同的结果。


这是一个更完整的演示:

for (var i = 5; i >= -5; i--) {
  console.log('Decimal: ' + pad(i, 3, ' ') + '  |  Binary: ' + bin(i));
  if (i === 0)
    console.log('Decimal:  -0  |  Binary: ' + bin(-0)); // There is no `-0`
}

function pad(num, length, char) {
  var out = num.toString();
  while (out.length < length)
    out = char + out;
  return out
}

function bin(bin) {
  return pad((bin >>> 0).toString(2), 32, '0');
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么按位“非1”等于-2? 的相关文章

  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • 如何使用 selenium 和 Mocha 获取 xPath() 选择的锚标记的文本

    我已经成功选择了 a 标签 我想显示锚标记的文本 但无法这样做 我正在使用 selenium mocha javascript 和 phantomJS 这是我的脚本 详细 var assert require assert var test
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • Haskell 元组构造函数 (GHC) 以及语言与其实现之间的分离

    当我意识到这一点时 哈斯克尔再次让我大吃一惊 x y 只是语法糖 x y 当然 我想将其扩展到更大的元组 但 x y z Gave me x y z 这不是我想要的 一时兴起 我尝试了 x y z 它起作用了 给出了我想要的 x y z 这
  • 如何导入从html导入.json的.js

    我不是说英语的公民 我英语不好 但我做得最好 我正在尝试导入一个从 html 导入 json 的 js 文件 js import JSON from json menu json function function parseMenu ul
  • 我如何在同时具有“script”和“doc”的 ES 上发出单个更新请求..?

    我的 文档 请求 POST test v2 update Z nM 2wBjkGOA r6ArOb doc CD middle prakash first raj doc as upsert true 我的 脚本 请求 POST test
  • 将编码字符添加到 url 会破坏 htaccess

    这是我的代码 RewriteEngine on RewriteRule page index php url 1 NC 当我访问时page http google com http google com 我相信你需要B escape htt
  • mv 包裹在 shell 脚本中的 if 内

    你怎么做到这一点 我的想法是这样的 另外 我需要使用 fi 并完成吗 或仅其中之一 if mv 1 txt gt 2 txt 0 then echo Success else echo Failure fi done 在 BASH 中只有这
  • 多重返回:哪一个设置最终的返回值?

    鉴于此代码 String test try return 1 finally return 2 语言规范是否定义了调用的返回值test 换句话说 在每个 JVM 中它总是相同的吗 在 Sun JVM 中 返回值是2 但我想确定 这不依赖于虚
  • Dask 连接的简单方法(水平,轴=1,列)

    Action将两个 csv data csv 和 label csv 读取到单个数据帧 df dd read csv data files delimiter header None names x y z intensity r g b
  • 基于另一张工作表中的公式的条件格式

    我有 2 张 Excel 2007 PT PT 表 其中一个 sheet1 有多个要验证的列 另一个 base valid 有 5 列需要验证 我正在尝试使用宏验证 regioes M2 列 Sub Validar Regioes Dim
  • 数据分割时使用 scikit-learn 标准化 PCA

    我有一个后续问题 如何使用 PCA 和 scikit learn 进行标准化 https stackoverflow com questions 25475465 how to normalize with pca and scikit l
  • jest 无法识别 URL 构造函数抛出的 TypeError

    Jest toThrow TypeError 与抛出的 TypeError 不匹配new URL构造函数 这是一个错误还是我做错了什么 笑话版本是29 4 2 测试用例 it throws TypeError when url is inv
  • JavaFX ContextMenu 如何获取单击的对象?

    我正在学习 javafx scene control ContextMenu 现在我面临一个问题 如何从 EventHandler 获取单击的对象 event source 和 event target 都返回 MenuItem 让我用一个
  • 使用 Valgrind 运行时 mmap 返回 EINVAL

    我针对 Valgrind 运行的 mips32 应用程序在 mmap 函数中失败 如果我单独运行它工作正常 但是当我针对 valgrind 运行它时 它每次都会失败并显示 EINVAL void mem uint32 t mmap NULL
  • Write系统调用直接将数据写入磁盘?

    我读过几个问题 here https stackoverflow com questions 1450551 buffered i o vs unbuffered io 与此相关 但我仍然有些困惑 我的理解是 write 系统调用将数据放入
  • lucene如何索引文档?

    我读了一些关于Lucene的文档 我还阅读了此链接中的文档 http lucene sourceforge net talks pisa http lucene sourceforge net talks pisa 我不太明白Lucene是
  • 针对写入量大的 Oracle 应用程序进行优化?

    对于主要写入 更新 Oracle 数据库的应用程序 可以使用哪些有用的 Oracle 优化 这里的一般使用模式不是像大多数情况那样进行网络服务或日志记录 而是保存系统的复杂状态 因此唯一需要读取的时间是系统启动时 之后更新并创建所有方式 因
  • 在 Android 上使用选定的 UID 模拟 NFC 卡

    我想问 2 个关于 NFC 卡模拟的问题 我可以模拟包含我选择的 uid 的 NFC 卡吗 I read HCE https developer android com guide topics connectivity nfc hce h
  • cuda内核调用是同步还是异步

    我读到可以使用内核启动来同步不同的块 即 如果我希望所有块在继续操作 2 之前完成操作 1 我应该将操作 1 放在一个内核中 将操作 2 放在另一个内核中 这样 我就可以实现块之间的全局同步 然而 cuda c 编程指南提到内核调用是异步的
  • 对url中的中文字符进行转义?

    有时 汉字会转义为以下形式 B9 F3 D6 DD C3 A9 CC A8 如何将这些字符转换回 Python 中可读的汉字 您可以使用urllib2 unquote像这样 gt gt gt import urllib2 gt gt gt
  • Spark 中的简单矩阵乘法

    我正在努力处理一些非常基本的 Spark 代码 我想定义一个矩阵x有 2 列 这是我尝试过的 scala gt val s breeze linalg linspace 3 3 5 s breeze linalg DenseVector D
  • 为什么按位“非1”等于-2?

    假设我们有1这个以 2 为基数的数字是 00000000000000000000000000000001 现在我想翻转所有位以获得以下结果 11111111111111111111111111111110 据我所知 解决方案是使用 按位非运