http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfbitwiseexclusiveoroperator.asp异或:当且仅当两位中有一位是1时候,结果位是1。主要用于开关一个位值。使用方法是对原
有内容进行异或操作,要变换的位为1,保持的为0。例如要变换1,3位,则使用:
0101。
有内容进行异或操作,要变换的位为1,保持的为0。例如要变换1,3位,则使用:
0101。
一个很简单的例子:
将变量a与变量b换位a = a ^ b;
b = a ^ b;
a = a ^ b;
概念和一些简单的应用我也是在学需要重写System.Object得GetHashCode的时候,里面提到一个使用异或结合属性值来产生哈西码的方式,我想知道为什么这样做可以保证唯一性
“一个类型常具有多个可以参与生成哈希代码的数据字段。生成哈希代码的一种方法是使用 XOR (eXclusive OR) 运算合并这些字段。”
这句话的意思是不是这样,使用异或只是生成哈希代码的一种方法。方法本身并不能保证哈希值唯一,要保证哈希值唯一就要保证参与异或的值唯一。比如这个:
public override int GetHashCode () {
return a.GetHashCode() ^ b.GetHashCode() ^ c.GetHashCode();
}
我想是这样,对于两个操作数按位异或,可以使两个操作数中相同的"位"置为0,不同的"位"置为1。
这样的结果中必然与操作数不同(当然要保证任一操作数不能为0)。这也是异或比“与”或“或”的优点吧。比如
111^011=100;101^100=001//只有这个的结果与原操作数不同
111&011=011;101&100=100
111|011=111;101|100=101