术语和代码行的平等
Equality of term and codeline
任何人都可以一步一步地向我解释,这个平等是如何成立的?
((a^b)&~b)|(~(a^b)&b) == a
最好的方法是什么?
要检查的程序:
#include <stdio.h>
int main()
{
int a, b;
for (a = 0; a != 2; ++a) {
for (b = 0; b != 2; ++b) {
printf("((%d^%d)&~%d)|(~(%d^%d)&%d) = %d (a=%d, b=%d)\n",
a,b,b,a,b,b, ((a^b)&~b)|(~(a^b)&b), a,b);
}
}
return 0;
}
执行产生:
((0^0)&~0)|(~(0^0)&0) = 0 (a=0, b=0)
((0^1)&~1)|(~(0^1)&1) = 0 (a=0, b=1)
((1^0)&~0)|(~(1^0)&0) = 1 (a=1, b=0)
((1^1)&~1)|(~(1^1)&1) = 1 (a=1, b=1)
数学解释看RbMm的备注
简单地开发异或并简化:
((a^b) & ~b) | (~(a^b) & b) ==
((a|b) & (~a|~b) & ~b) | ((a|~b) & (~a|b) & b) ==
((a|b) & ~b) | ((a|~b) & b) ==
a | a ==
a
另一种查看方式是定义f(a, b) = (a^b) & ~b
。
该语句变为 f(a, b) | f(a, ~b)
,因此您只需简化 f(a, b)
:
f(a, b) ==
(a^b) & ~b ==
(a|b) & (~a|~b) & ~b ==
(a|b) & ~b ==
a
所以 f(a, b) = a
不管 b
是什么,而 f(a, b) | f(a, ~b)
就是 a | a == a
.
(X&~Y)|(~X&Y) == X^Y //by definition of XOR
代入 X=a^b 和 Y=b:
((a^b)&~b)|(~(a^b)&b) == (a^b)^b
那么,剩下的就简单了:
(a^b)^b == a^(b^b) == a^0 == a
任何人都可以一步一步地向我解释,这个平等是如何成立的?
((a^b)&~b)|(~(a^b)&b) == a
最好的方法是什么?
要检查的程序:
#include <stdio.h>
int main()
{
int a, b;
for (a = 0; a != 2; ++a) {
for (b = 0; b != 2; ++b) {
printf("((%d^%d)&~%d)|(~(%d^%d)&%d) = %d (a=%d, b=%d)\n",
a,b,b,a,b,b, ((a^b)&~b)|(~(a^b)&b), a,b);
}
}
return 0;
}
执行产生:
((0^0)&~0)|(~(0^0)&0) = 0 (a=0, b=0)
((0^1)&~1)|(~(0^1)&1) = 0 (a=0, b=1)
((1^0)&~0)|(~(1^0)&0) = 1 (a=1, b=0)
((1^1)&~1)|(~(1^1)&1) = 1 (a=1, b=1)
数学解释看RbMm的备注
简单地开发异或并简化:
((a^b) & ~b) | (~(a^b) & b) ==
((a|b) & (~a|~b) & ~b) | ((a|~b) & (~a|b) & b) ==
((a|b) & ~b) | ((a|~b) & b) ==
a | a ==
a
另一种查看方式是定义f(a, b) = (a^b) & ~b
。
该语句变为 f(a, b) | f(a, ~b)
,因此您只需简化 f(a, b)
:
f(a, b) ==
(a^b) & ~b ==
(a|b) & (~a|~b) & ~b ==
(a|b) & ~b ==
a
所以 f(a, b) = a
不管 b
是什么,而 f(a, b) | f(a, ~b)
就是 a | a == a
.
(X&~Y)|(~X&Y) == X^Y //by definition of XOR
代入 X=a^b 和 Y=b:
((a^b)&~b)|(~(a^b)&b) == (a^b)^b
那么,剩下的就简单了:
(a^b)^b == a^(b^b) == a^0 == a