jes*_*ess -1 c bit-manipulation xor bitwise-xor
XNOR我在编写最多包含 7 个~和运算符的按位函数时遇到困难|。例子:bitXnor(6, -5) = 2。如果没有 ,我该如何做到这一点&?
到目前为止我有这个:
int bitXnor(int x, int y) {
return ~(~x | ~y);
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
int bitXnor(int x, int y) {
return ~(~x | ~y);
Run Code Online (Sandbox Code Playgroud)
现在是学习德摩根定律的好时机,即
~ (x & y) == (~x | ~y)
Run Code Online (Sandbox Code Playgroud)
XNOR 是
(~a & ~b) | (a & b)
Run Code Online (Sandbox Code Playgroud)
通过添加双反转(又名双非)来重写以获得
~~(~a & ~b) | ~~(a & b)
Run Code Online (Sandbox Code Playgroud)
然后使用 De Morgan 重写
~(~~a | ~~b) | ~(~a | ~b)
Run Code Online (Sandbox Code Playgroud)
并减少第一部分(即删除双反转)
~(a | b) | ~(~a | ~b)
Run Code Online (Sandbox Code Playgroud)
这是使用 7 的 XNOR~和|
资料来源: https: //en.wikipedia.org/wiki/De_Morgan%27s_laws
顺便提一句:
使用相同的原理德摩根定律可以导致
(~a & ~b) | (a & b)
Run Code Online (Sandbox Code Playgroud)
到
~~((~a & ~b) | (a & b))
Run Code Online (Sandbox Code Playgroud)
到
~(~(~a & ~b) & ~(a & b))
Run Code Online (Sandbox Code Playgroud)
~对于仅使用和构造的 XNOR &。在这种情况下需要 8 个操作员。
编辑:
~正如用户“chux-Reinstate Monica”所指出的,仅使用and&和7 个运算符即可完成此操作。
例如,通过添加一些额外的步骤,例如:
(~a & ~b) | (a & b)
Run Code Online (Sandbox Code Playgroud)
到
~~((~a & ~b) | (a & b))
Run Code Online (Sandbox Code Playgroud)
到
~(~(~a & ~b) & ~(a & b))
Run Code Online (Sandbox Code Playgroud)
到
~((a | b) & (~a | ~b))
Run Code Online (Sandbox Code Playgroud)
到
~(((a & (~a | ~b)) | (b & (~a | ~b)))
Run Code Online (Sandbox Code Playgroud)
到
~((a & ~a) | (a & ~b) | (b & ~a) | (b & ~b))
Run Code Online (Sandbox Code Playgroud)
到
~((a & ~b) | (b & ~a))
Run Code Online (Sandbox Code Playgroud)
到
~(a & ~b) & ~(b & ~a)
Run Code Online (Sandbox Code Playgroud)
现在已减少至 7 名操作员。