Swift中^运算符是什么?结合Hashable协议实现场景解析
在Swift中,^运算符到底是什么?
你提到的^在Swift里是按位异或运算符(Bitwise XOR Operator),它是专门用来对两个整数的二进制位进行逐位异或操作的运算符。
核心规则
- 异或的逻辑很直白:当两个对应二进制位不同时,结果位为
1;当两个对应二进制位相同时,结果位为0。
举个实际计算的例子:5 ^ 3- 5的二进制是
101 - 3的二进制是
011 - 异或后得到
110,也就是十进制的6
- 5的二进制是
常见用途
除了你用到的计算哈希值场景,它还有不少实用的位操作场景:
- 不用临时变量快速交换两个整数:
a ^= b; b ^= a; a ^= b - 翻转某个整数的特定二进制位
- 检测两个整数的二进制位差异
结合你的代码说两句
你在MatrixLocation的hashValue实现里用了row.hashValue ^ col.hashValue,虽然能生成哈希值,但这里有个小坑:异或是满足交换律的,也就是说MatrixLocation(row:1, col:2)和MatrixLocation(row:2, col:1)会得到完全相同的哈希值,这会大幅提升哈希冲突的概率。
如果要优化这个哈希值的计算,可以给其中一个值做位移后再异或,比如:
struct MatrixLocation: Hashable { let row: Int let col: Int var hashValue: Int { return row.hashValue ^ (col.hashValue << 16) } }
这样能有效降低不同位置生成相同哈希值的概率。
内容的提问来源于stack exchange,提问作者stevenpcurtis
相关产品推荐
相关产品推荐

