能否请您用简单的英语向我解释什么是 XOR (^
) 运算符以及它在以下代码中的作用:
public int GetHashCode(Box bx)
{
int hCode = bx.Height ^ bx.Length ^ bx.Width;
return hCode.GetHashCode();
}
最佳答案
XOR 代表异或。它确保 A 或 B 为真,但绝不会同时为真。在这种情况下,我们正在进行按位运算,因此您可以制作一个漂亮的结果小图,如下所示;
0 ^ 1 = 1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0
由于您将其应用于整数,因此上述结果将应用于操作数中的每一位。因此,假设您的高度、长度和宽度分别为 1、2、3。
你首先会拥有
0001 ^ 0010 得到 0011 然后将其异或为 3 所以 0011 ^ 0011 得到 0000
编辑:从评论中提供维基链接以补充我的解释; http://en.wikipedia.org/wiki/Exclusive_or#Computer_science
编辑:为什么 0001 ^ 0010
会导致 0011
?
所以最好一点一点地做。想想运算符迭代两组位并比较它们的对。所以在这种情况下,让我们从右到左工作(在这种情况下从最不重要到最重要)。
1 ^ 0 = 1 // xxx1
0 ^ 1 = 1 // xx11
0 ^ 0 = 0 // x011
0 ^ 0 = 0 // 0011 - end of input
因此,将其重新组合在一起,您将得到 0011
。基本上,采用每对输入并引用结果的真值表。注释显示 x
的输出是一个尚未计算的值。
关于碰撞,是的,在这种情况下有很多碰撞。如果我说它是独一无二的,那是一个糟糕的词选择。我真正的意思是,如果您将 2、8、4 作为您的值,则按该顺序对它们进行异或运算将始终产生相同的值。
关于c# - XOR 运算符 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239755/