【发布时间】:2011-11-26 04:50:15
【问题描述】:
此代码块中波浪号的用途可能是什么?
public override int GetHashCode()
{
return ~this.DimensionId.Id ^ this.ElementId.Id;
}
^ 运算符(C# 参考) 视觉工作室 2010 二进制 ^ 运算符是为整数类型和 bool 预定义的。对于整数类型,^ 计算其操作数的按位异或。对于 bool 操作数,^ 计算其操作数的逻辑异或;也就是说,当且仅当它的一个操作数恰好为真时,结果才为真。
~ 运算符(C# 参考) 视觉工作室 2010 ~ 运算符对其操作数执行按位补码运算,这具有反转每个位的效果。为 int、uint、long 和 ulong 预定义了按位补码运算符。
~(波浪号)运算符对其单个整数操作数执行按位补码。 (因此,~ 运算符是一元运算符,如 ! 和一元 -、& 和 * 运算符。)对数字进行补码意味着将所有 0 位更改为 1,将所有 1 更改为 0
为什么在这种情况下使用它(而不是简单地排除它)的原因是什么?
【问题讨论】:
-
如果值很小,xor 运算符往往会产生较差的散列分布。翻转位可以改变这一点。这实际上奏效的可能性并不好。将 1 乘以素数并相加效果更好。
标签: c#