这里的插入符号(^)是什么,它在做什么?
- (NSUInteger)hash {
return [self.name hash] ^ [self.birthday hash];
}
答案 0 :(得分:3)
这是一个按位异或。它不是Objective-C,它只是普通的旧C.它比较你给它的两个项目的位,并返回一个1s的值,仅用于其中一个项目而不是另一个项目中的1个位。
如果您有两个号码:
5 (00000101)
11 (00001011)
按位异或将产生结果:
14 (00001110)
答案 1 :(得分:1)
这是一个按位异或操作。换句话说,如果其中一个表达式为true,则此代码尝试返回true,但不是两者。 我会这样编码:
BOOL nameHash = ...;
BOOL birthdayHash = ...;
if(nameHash && !birthdayHash) return TRUE;
if(!nameHash && birthdayHash) return TRUE;
return FALSE;
让编译器进行巧妙的优化工作。上面的代码清晰可读。如果它使代码变得模糊,那么冗长只会很糟糕。