If statement 这两部分代码之间有什么区别吗?

If statement 这两部分代码之间有什么区别吗?,if-statement,nested,logical-operators,If Statement,Nested,Logical Operators,以下方面是否存在任何差异(逻辑?性能?): if(a==1) { if(b==2) //some code } if(a==1 && b==2) { //same code } 从一个非常高的层次上讲,编译器将把代码转换成汇编代码,而汇编程序将把代码转换成机器代码。我不确定不同的指令集体系结构会有什么不同,但对于我熟悉的指令集体系结构,如ARM和MIPS,无法在一行汇编中编写复合if语句。编译器基本上会 if(a==1&&b==1) //一些代码 进入 i

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

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


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

从一个非常高的层次上讲,编译器将把代码转换成汇编代码,而汇编程序将把代码转换成机器代码。我不确定不同的指令集体系结构会有什么不同,但对于我熟悉的指令集体系结构,如ARM和MIPS,无法在一行汇编中编写复合if语句。编译器基本上会

if(a==1&&b==1)
//一些代码

进入

if(a==1){
如果(b==1)
//一些代码
}

因此,无论从逻辑角度还是从性能角度来看,这都无关紧要,特别是因为许多编译器都进行了大量优化。但正如Andreas所说,您可以在嵌套示例中的第二个if语句之外添加额外的代码,这可能会也可能不会影响嵌套条件的计算。

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

这类等价物有很多: p&(q | r)等同于(p&q)|(p&r)

如果你想进一步调查,从德摩根定律开始


在大多数(如果不是所有的话)情况下,逻辑上没有区别,基础机器代码也可能没有任何区别。假设您的语言对
&&
(可能)使用短路求值,则没有区别。如果
a==1,则第一个实际输入第一个if语句。但是,如果其中一条或两条语句都为false,则第二条语句将跳过if语句。也就是说,它们本质上是一样的。@Nathan:你是指一些涉及副作用的微妙的复杂问题吗?
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.
    }

}