按位异或两个数字会得到数字的和或差

2023-11-20

当我对任意两个数字进行异或时,我得到的是它们的差值或总和的绝对值。 我在谷歌上搜索了很多,试图找到任何相关的公式。但对此没有明显的公式或陈述。

Example:

10 XOR 2 = 1010 XOR 10 = 1000(8)
 1 XOR 2 =   01 XOR 10 =   11(3)

所有数字都是如此吗?


正如 Dukelings 的回答和 CmdrMoozy 的评论所示,这并不总是正确的。从你的帖子来看,至少是真的有时。那么这里就稍微详细一点的分析一下。

The +-side

显然,如果(但不仅仅是如果)(x & y) == 0 then (x ^ y) == x + y, 因为
x + y = (x ^ y) + ((x & y) << 1)

That accounts for 332 cases (for every bit position, there are 3 choices that result in a 0 after the AND) where (x ^ y) == (x + y).

然后还有一些情况(x & y) != 0。这些案例正是这样的案例
(x & y) == 0x80000000,因为最高位的进位是唯一不影响任何内容的进位。

That adds 331 cases (for 31 bit positions there are 3 choices, for the highest bit there is only 1 choice).

The --side

对于减法,有一个鲜为人知的恒等式x - y == (x ^ y) - ((~x & y) << 1).

That's really not too different from addition, and the analysis almost the same. This time, if (but not only if) (~x & y) == 0 then (x ^ y) == x - y. That ~ doesn't change the number of cases: still 332. Most of them are different cases than before, but not all (consider y = 0, then x can be anything).

There are again 331 extra cases, this time from (~x & y) == 0x80000000.

双方

The + and -双方并不脱节。有时,x ^ y = x + y = x - y。这只有在以下任一情况下才会发生y = 0 or y = 0x80000000. If y = 0, x可以是任何东西,因为(x & 0) == 0 and (~x & 0) == 0对全部x. If y = 0x80000000, x又可以是任何东西,这次是因为x & 0x80000000 and ~x & 0x80000000两者都可以算出 0 或0x80000000,两者都很好。

That gives 233 cases where x ^ y = x + y = x - y.

It also gives (332 + 331) * 2 - 233 cases where x ^ y is x + y or x - y or both, which is 4941378580336984 or in base 16, 118e285afb5158, which is also the answer given by this site.

That's a lot of cases, but only roughly 0.02679% of the total space of 264.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按位异或两个数字会得到数字的和或差 的相关文章

  • 最接近 x,y 的线上的点[重复]

    这个问题在这里已经有答案了 可能的重复 如何判断一个点是否在某条线附近 https stackoverflow com questions 910882 how can i tell if a point is nearby a certa
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • 最低共同祖先算法

    所以我一直在研究实现最低共同祖先算法 我研究了许多不同的算法 主要是 Trajan 解决方案的变体或 RMQ 的变体 我正在使用非二叉树 我的树经常会在查询之间发生变化 因此预处理不一定值得 树的节点数不应超过 50 75 个 我想知道的是
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 在大文件中查找重复项

    我有一个非常大的文件 大约有 1500 万个条目 文件中的每一行都包含一个字符串 称为键 我需要使用 java 查找文件中的重复条目 我尝试使用哈希图并检测重复的条目 显然 这种方法向我抛出了 java lang OutOfMemoryEr
  • 算法 - 树中所有节点的最大距离

    所以 找到树中两个节点之间的最长路径相当容易 但我想要的是找到从节点出发的最长路径x到树中的另一个节点 对于所有x 这个问题也可以用以下方式表达 计算从给定的树中可以生成的所有有根树的高度 One way of course is to j
  • 查找数组中的重叠数据

    我们正在编写一个 C 应用程序 它将有助于删除不必要的数据重复器 只有在以下情况下才可以移除中继器 all它接收到的数据被其他中继器接收 我们第一步需要做的事情解释如下 例如 我有 int 数组的集合 A 1 2 3 4 5 b 2 4 6
  • 仅使用两个变量交换两个数字

    它如何执行交换 a a b b a b a b a 我不同意把它换成书 书中的选项包括 a和b的值的补集 否定和b 希望这些选项也不能满足它 正确的算法应该是 a a b b a b a a b
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 插入排序 - 如何接受输入并打印排序后的数组

    我试图做一个插入排序程序 它接受任何数据类型 Int Double String 然后打印排序后的数组 我知道我的代码可以工作 但我无法找出真正的问题 import java util public class MyInsertionSor
  • Python 将字符串组合成尽可能短的字符串?

    如果我有一个字符串列表 我想将它们组合成一个具有重叠字符的字符串 如果没有剩余的重叠字符串 请将其添加到末尾 这是一个过于简化的版本 input one two output twone 我正在寻找一种方法来对输入列表中的任意数量的字符串执
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • 在 O(n) 时间内对列表中的数字方块进行排序?

    给定一个按排序顺序排列的整数列表 例如 9 2 0 2 3 我们必须对每个元素进行平方并按排序顺序返回结果 所以 输出将是 0 4 4 9 81 我可以找出两种方法 O NlogN 方法 我们将每个元素的平方插入哈希集中 然后将元素复制到列
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • 二分查找问题? [复制]

    这个问题在这里已经有答案了 可能的重复 实施二分查找有哪些陷阱 https stackoverflow com questions 504335 what are the pitfalls in implementing binary se
  • 如何发现“贪婪”算法?

    我正在读一本关于 贪婪 算法 但我很难发现它们解决真正的 顶级程序员 问题 If I know给定的问题可以用 贪婪 算法来解决 因此编写解决方案非常容易 然而 如果我没有被告知这个问题是 贪婪的 我就无法发现它 用 贪婪 算法解决的问题有
  • 在c#中遍历对象树

    我有一棵由多个对象组成的树 其中每个对象都有一个名称 string id int 以及可能是同一类型的子数组 如何遍历整个树并打印出所有 id 和名称 我是编程新手 坦率地说 我很难理解这个问题 因为我不知道有多少个级别 现在我正在使用fo

随机推荐

  • Android 运行时权限示例

    欢迎来到 Android 运行时权限示例 随着介绍安卓6 0棉花糖 Google 改变了应用程序处理权限的方式 在本教程中 我们将研究引入的新 Android 运行时权限以及如何处理它们 如果处理不当 可能会导致应用程序崩溃 什么是 And
  • 如何创建 Django 模型

    介绍 在之前的教程中 如何创建 Django 应用程序并将其连接到数据库 我们介绍了如何创建 MySQL 数据库 如何创建和启动 Django 应用程序以及如何将其连接到 MySQL 数据库 在本教程中 我们将创建 Djangomodels
  • 如何在 JavaScript 中修改 CSS 类

    介绍 在本教程中 您将学习如何使用 JavaScript 修改 CSS 类classListDOM 操作项目的对象 这classListobject 允许您调整分配给 HTML 元素的 CSS 类 先决条件 JavaScript 的一般知识
  • 如何在 Python 中将 NumPy 数组转换为列表

    介绍 With NumPy np array对象可以转换为列表tolist 功能 这tolist 函数不接受任何参数 如果数组是一维的 则返回包含数组元素的列表 对于多维数组 返回嵌套列表 先决条件 为了完成本教程 您将需要 熟悉 Pyth
  • 如何访问 DOM 中的元素

    介绍 In 了解 DOM 树和节点中 我们回顾了 DOM 如何构建为称为节点的对象树 这些节点可以是文本 注释或元素 通常当我们访问 DOM 中的内容时 会通过 HTML 元素节点 为了能够自信地访问 DOM 中的元素 最好具备 CSS 选
  • MongoDB findOne 示例

    MongoDB findOne 方法仅返回一个满足以下条件的文档criteria进入 如果输入的条件与多个文档匹配 则该方法根据自然排序仅返回一个文档 这反映了文档在数据库中存储的顺序 MongoDB findOne MongoDB fin
  • 如何在 Java 中打开文件

    有时我们需要在java程序中打开一个文件 java awt Desktop可以用java来打开文件 桌面实现与平台相关 因此首先我们应该检查操作系统是否支持桌面 此类查找注册到当前平台的关联应用程序以打开文件 Java 打开文件 Let s
  • Kotlin 类 - Kotlin 构造函数

    在本教程中 我们将讨论面向对象编程Kotlin 的概念 我们将详细讨论 Kotlin 类 我们还将了解 kotlin 构造函数 访问修饰符和抽象类 Kotlin 类 A class is a blue print defined which
  • 如何在 MySQL 中创建新用户并授予权限

    介绍 MySQL是一个开源的关系数据库管理系统 它通常部署为灯堆栈 这代表Linux Apache MySQL 和PHP 并且 截至撰写本文时 是最流行的开源数据库在世界上 本指南概述了如何创建新的 MySQL 用户并授予他们执行各种操作所
  • 如何在 Rocky Linux 9 上安装和使用 PostgreSQL

    介绍 关系数据库管理系统是许多网站和应用程序的关键组件 它们提供了一种结构化的方式来存储 组织和访问信息 PostgreSQL也称为 Postgres 是一个关系数据库管理系统 它提供结构化查询语言 更广为人知的名称为 SQL 的实现 许多
  • Linux 导航和文件管理

    介绍 导航和操作文件系统中的文件和文件夹是使用大多数计算机的关键部分 云服务器大多使用相同的常见 Linux shell 和常见 Linux 命令来处理文件和文件夹 本终端将介绍使用这些命令的一些基本技能 先决条件和目标 为了遵循本指南 您
  • 如何在 Ubuntu 18.04 上安装 Elasticsearch、Logstash 和 Kibana (Elastic Stack)

    笔者精选互联网档案馆接受捐赠作为为捐款而写程序 介绍 Elastic Stack 以前称为ELK堆栈 是由以下公司制作的开源软件集合Elastic它允许您搜索 分析和可视化从任何来源以任何格式生成的日志 这种做法称为集中记录 当尝试识别服务
  • Log4j2 示例教程 - 配置、级别、Appender

    欢迎使用 Apache Log4j2 示例教程 如果您向专家开发人员询问应用程序中最烦人的事情 答案可能与日志记录有关 如果应用程序中没有合适的日志记录 维护将是一场噩梦 大多数应用程序都会经过开发测试 单元测试 集成测试 但当涉及到生产时
  • 如何在 Debian 8 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    介绍 LAMP 软件堆栈 包括LLinux操作系统 A阿帕奇网络服务器 MmySQL 数据库 以及PHP 脚本语言是 Web 或应用程序开发的良好基础 安装在一起后 该软件堆栈使您的服务器能够托管动态网站和 Web 应用程序 在本教程中 我
  • 如何在 Linux 上安装 TestDisk 并恢复已删除的文件

    您是否曾经遇到过不小心删除文件的情况 在本教程中 我们将介绍如何在 Linux 中安装 TestDisk 并恢复已删除的文件 在本教程中 我将使用 Ubuntu 服务器进行工作 但即使您使用任何其他发行版 也可以遵循相同的步骤 唯一不同的是
  • 将QChartView插入到ui中

    我想把在同一个 qtchart 上绘制烛台和 5 天平均线 但给出两个 x 轴图将代码写入 UI 加载器 import sys from PyQt5 QtWidgets import QApplication QWidget from Py
  • 如何将 PowerShell 变量返回到 VBScript

    我有一个 vbscript 来调用 PowerShell 脚本 希望将 PowerShell 输出返回到 HTA HTML 应用程序 GUI 现在我只想看看是否可以将 PowerShell 输出返回到 vbscript 中的 MsgBox
  • 如何找到 .bash_profile 并将其添加到 shell 的初始化文件中? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试使用 rvm 升级 ruby 上务实网站 它说 重要的部分是将以下行添加到 shell 初始化文件 bash profile 的末尾 s HOME rvm scripts rvm so
  • 卸载 RVM 后 Zshell 启动,退出状态为 1

    我刚刚卸载了rvm 我跑了rvm implode并从中删除了rvm PATH in my zshrc 如指定这个堆栈溢出帖子 卸载后 我注意到我的 shell 启动的退出状态为1 我已经使用它检查过echo 加载 shell 后 我总是得到
  • 按位异或两个数字会得到数字的和或差

    当我对任意两个数字进行异或时 我得到的是它们的差值或总和的绝对值 我在谷歌上搜索了很多 试图找到任何相关的公式 但对此没有明显的公式或陈述 Example 10 XOR 2 1010 XOR 10 1000 8 1 XOR 2 01 XOR