And*_*i N 47 hash hashcode xor
我经常看到类似的代码
int hashCode(){
return a^b;
}
Run Code Online (Sandbox Code Playgroud)
为何选择XOR?
Nil*_*nck 89
在所有位操作中,XOR具有最佳位混洗属性.
这个真值表解释了原因:
A B AND
0 0 0
0 1 0
1 0 0
1 1 1
A B OR
0 0 0
0 1 1
1 0 1
1 1 1
A B XOR
0 0 0
0 1 1
1 0 1
1 1 0
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,AND和OR在混合位方面做得很差.
OR平均会产生3/4的一位.另一方面,AND将产生平均3/4的空位.只有XOR具有偶数一位与空位分布.这使得它对于哈希码生成非常有价值.
请记住,对于哈希代码,您希望尽可能多地使用密钥信息,并获得良好的哈希值分布.如果您使用AND或OR,您将获得偏向于具有大量零或具有大量数字的数字的数字.
dog*_*ane 19
XOR具有以下优点:
更多信息在这里.
XOR 运算符是可逆的,即假设我有一个位串 as0 0 1并且我将它与另一个位串进行异或1 1 1,输出为
0 xor 1 = 1
0 1 = 1
1 1 = 0
Run Code Online (Sandbox Code Playgroud)
现在我可以再次对第一个字符串与结果进行异或以获得第二个字符串。IE
0 1 = 1
0 1 = 1
1 0 = 1
Run Code Online (Sandbox Code Playgroud)
所以,这使得第二个字符串成为一个键。其他位运算符未发现此行为
请参阅此了解更多信息-->为什么在密码学中使用 XOR?
| 归档时间: |
|
| 查看次数: |
10933 次 |
| 最近记录: |