oracle - 为什么 (a | b ) 等于 a - (a & b) + b?

标签 oracle binary computer-science theory proofs

我正在寻找一种使用 Oracle 数据库执行 BITOR() 的方法,并遇到了一个仅使用 BITAND() 的建议,将 BITOR(a,b) 替换为 a + b - BITAND(a,b) .

我手动测试了几次,并验证它似乎适用于我能想到的所有二进制数,但我无法快速找出数学证明来证明为什么这是正确的。
有人可以启发我吗?

最佳答案

A & B 是 A 和 B 中都打开的位的集合。A - (A & B) 留下仅在 A 中打开的所有位。将 B 添加到其中,您将得到所有A 中打开的位或 B 中打开的位。

A 和 B 的简单加法不起作用,因为两者都有 1 位。通过首先删除 A 和 B 共有的位,我们知道 (A-(A&B)) 将没有与 B 共有的位,因此将它们相加可以保证不会产生进位。

关于oracle - 为什么 (a | b ) 等于 a - (a & b) + b?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604258/

相关文章:

c++ - 将 Oracle DB 表的 ROWID 存储为字符数组

java - 如何使用 JDBC 从 Oracle 数据库检索图像?

c - 用C语言将原始二进制文件写入文件

c - 从二进制文件写入和读取整数数组

python - ValueError : not enough values to unpack (expected 2, got 1) when splitting line

algorithm - 我们如何证明算法的运行时间界限是紧的?

oracle - 如何在 Oracle 中授权用户/应用程序组合?

sql - 外键可以为空。为什么需要它?

c - 在 for 循环比较中使用二进制数

javascript - 我的网络 worker 似乎没有正确计算