我正在寻找一种使用 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/