我昨天查看了一些.net源代码,看到了GetHashcode的几个实现,其中包含以下内容:
(i1 << 5) + i ^ i2
Run Code Online (Sandbox Code Playgroud)
我理解代码在做什么以及为什么.我想知道的是为什么他们使用(i1 << 5)+ i代替(i1 << 5)- i.
我见过的大多数框架都使用-i,因为它相当于乘以31这是素数,但是微软的方式相当于乘以33,它有11和3作为因子,因此不是素数.
这有什么理由吗?有任何合理的假设吗?