我需要比较很多整数值是否相等。
哪种方法最快?
A)
int a1 = 12345;
int a2 = 54321;
if(a1 == a2)
{
//do something.
}
B)
int a1 = 12345;
int a2 = 54321;
if( (a1 ^ a2) == 0 )
{
//do something.
}
我需要比较很多整数值是否相等。
哪种方法最快?
A)
int a1 = 12345;
int a2 = 54321;
if(a1 == a2)
{
//do something.
}
int a1 = 12345;
int a2 = 54321;
if( (a1 ^ a2) == 0 )
{
//do something.
}
我怀疑第一个选项实际上更快。毕竟,比较两个整数是否相等并不是一项罕见的操作,所以我想它应该得到了很好的支持 :) 然而,更重要的是它更加易读。
在我看来,将整数进行比较以检查它们是否相等几乎不可能成为瓶颈。如果你真的觉得这是问题,那么请在尽可能真实的情况下对你的代码进行基准测试,然后尝试各种更改(例如异或、减法等)并重新测量。但请确保在花费时间远离最明显、简单、易读的代码之前,确实有需要解决的问题。
我已经编写了一些代码来验证这个问题。
static void Main( string[] args )
{
int a1 = 123456;
int a2 = 654321;
int a3;
var t = new System.Diagnostics.Stopwatch();
t.Start();
for ( int i = 0; i < int.MaxValue; i++ )
{
if ( a1 == a2 )
{
a3 = a1 + a2;
}
}
t.Stop();
Console.WriteLine( t.ElapsedMilliseconds );
t.Reset();
t.Start();
for ( int i = 0; i < int.MaxValue; i++ )
{
if ( ( a1 ^ a2 ) == 0 )
{
a3 = a1 + a2;
}
}
t.Stop();
Console.WriteLine( t.ElapsedMilliseconds );
Console.ReadKey();
}