这两部分代码有什么区别吗?

时间:2014-06-03 19:41:12

标签: if-statement nested logical-operators

以下是否存在差异(逻辑?性能?):

if(a==1)
{
    if(b==2)
    //some code
}


if(a==1 && b==2)
{
//same code
}

3 个答案:

答案 0 :(得分:0)

if(a==1)
{
    // Except you can place some code in here if you get in the first if-statement 

    if(b==2)
    {
        //you need to use curly brackets in the 2nd if statement to, except if you execute one line
          of code.
    }

}

答案 1 :(得分:0)

从很高的层面来看,编译器会将该代码转换为汇编代码,汇编器会将其转换为机器代码。我不确定不同的指令集架构可能会有什么不同,但对于我熟悉的那些,例如ARM和MIPS,没有办法在一行程序集中编写复合if语句。编译器基本上会转向

if(a == 1 && b == 1) //some code

if(a == 1){ if(b == 1) //some code } 所以从逻辑或性能的角度来看无关紧要,特别是因为许多编译器无论如何都做了很多优化。但是就像Andreas所说的那样,您可以在嵌套示例中的第二个if语句之外添加其他代码,这可能会也可能不会影响嵌套条件的评估。

答案 2 :(得分:0)

没有逻辑差异。 “如果A和B然后......”在逻辑上与“如果A然后如果B那么......”相同......

有很多这样的等价物: p& (q | r)相当于(p& q)| (p& r)

如果您想进一步调查,请从 DeMorgan的法律开始

https://en.wikipedia.org/wiki/De_Morgan%27s_laws