哪个是比较两位数最高效的方法?

Yur*_*riy 3 .net c# binary comparison performance

我需要将很多整数值与相等进行比较.

哪种方法最快?

一个)

int a1 = 12345;
int a2 = 54321;
if(a1 == a2)
{
   //do something.
}
Run Code Online (Sandbox Code Playgroud)

B)

int a1 = 12345;
int a2 = 54321;
if( (a1 ^ a2) == 0 )
{
   //do something.
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

我怀疑首先实际上是更快.这并不像比较两个整数的平等是一个不常见的操作,所以我认为它得到了很好的支持:)然而,更重要的是它更多,更具可读性.

对我来说似乎不太可能比较整数是否是你的瓶颈.如果你真的觉得它是,那么无论如何都要将你所拥有的东西作为现实情况进行基准测试,然后尝试各种变化(可能是异或,也许是减法等)并重新测量.但是,确保在花时间摆脱最明显,简单,可读的代码之前,确实已经得到了一些你需要修复的东西.


Wil*_*ean 5

回答这样的问题的唯一方法是在特定的应用程序和环境中测量它.

但是先做,不要担心.在C#中你没有什么可能做的,这将成为一个问题.

如果你处于一个奇怪的角色表现,你真的比MS工具团队更了解如何比较整数,那么你应该用汇编语言写作.

就个人而言,我无法想象一个场景,即紧密循环中两个整数的比较将主导你的时间 - 循环和分支开销将与比较成本相似或更大,即便如此,也就是假设这个伟大的数据块神奇地出现在CPU缓存中,没有任何分页或内存I/O成本.

比较(以及设置为零和乘以2的乘法)的操作的洛可可替换对于适当的商业工具链(craptastic嵌入式C编译器可能仍然需要它们)来说已经不合适了20年的最佳时间.现在是时候停止思考它们了.