C# 比较逻辑条件
有两个逻辑条件:C# 比较逻辑条件,c#,.net,performance,comparison,logic,C#,.net,Performance,Comparison,Logic,有两个逻辑条件: A. ( Ls != Ec && Ls != Uc && Ls != Rfc ) B. (!(Ls==Ec || Ls == Uc || Ls == Rfc)) 变量是Ls、Ec、Uc、Rfc整数 我发现这两个条件在逻辑上是相同的 我的问题是!: 是否有在线工具/网络来检查多个/两个逻辑条件? 性能方面,一般来说哪个更好,或者与C.NET3.5相比更好 谢谢。我在网上什么都不知道,只知道学习和应用,它会让你自己去那里。有句谚语说,先让它工作起
A. ( Ls != Ec && Ls != Uc && Ls != Rfc )
B. (!(Ls==Ec || Ls == Uc || Ls == Rfc))
变量是Ls、Ec、Uc、Rfc整数
我发现这两个条件在逻辑上是相同的
我的问题是!:
是否有在线工具/网络来检查多个/两个逻辑条件?
性能方面,一般来说哪个更好,或者与C.NET3.5相比更好
谢谢。我在网上什么都不知道,只知道学习和应用,它会让你自己去那里。有句谚语说,先让它工作起来,然后让它快点!。我假设两个版本之间存在的差异不会影响应用程序的整体性能,至少在99.99%的应用程序中是如此。如果您的应用程序是剩下的0.001%之一,那么您正在编写非常特殊和复杂的高速软件。在这种情况下,你不应该使用理论工具。在真实的生活条件下测量它 C编译器似乎为调试和发布版本生成的两个代码生成了相同的IL。因此,两者之间必须没有性能差异 事实上,根据IL,C编译器将Test2转换为TestOne。当您在Reflector中看到编译后的dll时,TestTwo变成了TestOne 我编译了以下代码并在ILDASM中打开它们
public bool TestOne(int l, int e, int u, int r)
{
return (l != e && l != u && l != r);
}
public bool TestTwo(int l, int e, int u, int r)
{
return (!(l == e || l == u || l == r));
}
以下是我在基于版本构建的ILDASM中看到的内容
.method public hidebysig instance bool TestOne(int32 l,
int32 e,
int32 u,
int32 r) cil managed
{
// Code size 19 (0x13)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: beq.s IL_0011
IL_0004: ldarg.1
IL_0005: ldarg.3
IL_0006: beq.s IL_0011
IL_0008: ldarg.1
IL_0009: ldarg.s r
IL_000b: ceq
IL_000d: ldc.i4.0
IL_000e: ceq
IL_0010: ret
IL_0011: ldc.i4.0
IL_0012: ret
} // end of method Program::TestOne
.method public hidebysig instance bool TestTwo(int32 l,
int32 e,
int32 u,
int32 r) cil managed
{
// Code size 19 (0x13)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: beq.s IL_0011
IL_0004: ldarg.1
IL_0005: ldarg.3
IL_0006: beq.s IL_0011
IL_0008: ldarg.1
IL_0009: ldarg.s r
IL_000b: ceq
IL_000d: ldc.i4.0
IL_000e: ceq
IL_0010: ret
IL_0011: ldc.i4.0
IL_0012: ret
} // end of method Program::TestTwo
我使用VS2008SP1.NET3.5SP1来测试这段代码 我相信这取决于实现……在基于.Net的平台上,根据我的记忆,当使用&&运算符时,表达式从左到右求值,如果左操作数为false,则右操作数甚至不求值。按照这种逻辑,我觉得选项A将是一个被选中的选项,如果那些最左边的操作数中的一个被证明是错误的,那么它会更快。我想这可能是IL-generated更喜欢使用TestOne方法的原因,顺便说一句,推断所选路径的好主意,谢谢Chansik Im。你已经发现了De Morgan定理@Everyone I know这是一个愚蠢的问题&我也没有制作任何高端应用程序,只是想知道是否存在性能差异?很好,谢谢就性能而言,两者甚至不会有丝毫差异??是吗?@Rahul Joshi-如果在不同的条件下没有副作用,短路可能会对性能产生非常轻微的影响。