哪一个更快
int a = 100;
//First Way
if (a != 100)
{
//Do something when a is not equal to 100
}
else
{
//Do something when a is equal to 100
}
//Second Way
if (a == 100)
{
//Do something when a is equal to 100
}
else
{
//Do something when a is not equal to 100
}
我认为第二种方式更快,但我很想知道NOT EQUAL(!=)运算符是如何解决的。它是否首先实现了相等(==)操作,然后结果被否定为!(a == 100)?任何帮助都会得到很高的评价。
答案 0 :(得分:10)
两者之间没有任何区别。对于int
,这一切都归结为x86上的两个汇编指令之一:
je
- 如果相等则跳转jne
- 跳得不等这些或任何jxx
指令都需要相同的时间。
另请参阅与您的问题相关的my other answer。
既然你真的很在乎,我建议你亲自测试一下。写下两个循环,一个使用==
,另一个使用!=
。然后使用System.Diagnostics.Stopwatch
计算时间,将其包含在对Start()
和Stop()
的调用中。然后比较。通过循环进行足够多的迭代(以最小化其他定时错误,如上下文切换,中断等),您将看不到任何差异。
答案 1 :(得分:1)
我认为在二进制级别上,它只是一个操作(不要引用我),所以要么基本相同。
那就是说,如果你想在这个级别进行优化,你就会做错事。这不是集会。
答案 2 :(得分:-2)
在我看来,一般来说,NOT EQUAL操作(!=)应该比EQUAL(==)更快,因为一旦有一些块值(它基于你的OS是32,NOT EQUAL操作将返回结果) -bit或64-bit on)不相等。
在您的情况下,2个操作应该更快相等,因为100是4个字节的整数。
我认为2运算符没有相同的实现。