Yai*_*vet 5 c# binary xor bitwise-operators
能否请您用简单的英语解释一下XOR(^)运算符及其在以下代码中的作用:
public int GetHashCode(Box bx)
{
int hCode = bx.Height ^ bx.Length ^ bx.Width;
return hCode.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)
XOR代表独家或.它确保A或B是真的但不是两者都是.在这种情况下,我们正在做一个按位操作,所以你可以做一个很好的结果图,它们如下;
0 ^ 1 = 1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0
Run Code Online (Sandbox Code Playgroud)
由于您将其应用于整数,因此上述结果将应用于操作数中的每个位.所以我们假设你的高度,长度和宽度分别为1,2,3.
你会先拥有
0001 ^ 0010导致0011然后将XOR变为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
Run Code Online (Sandbox Code Playgroud)
所以拼凑起来,你得到了0011.基本上,取每对输入并参考结果的真值表.注释显示输出x为尚未计算的值.
关于碰撞,是的,在这种情况下有很多碰撞.如果我说它是独特的,这是一个糟糕的词选择.我真正的意思是,如果你有2个,8个,4个作为你的值,那么它们按顺序总是会产生相同的值.
| 归档时间: |
|
| 查看次数: |
3825 次 |
| 最近记录: |