Разница между вложенным if (условием) и логическим оператором

#performance #if-statement #logic #operator-keyword #logical-operators

#Производительность #if-оператор #Логические #оператор-ключевое слово #логические операторы

Вопрос:

В чем разница между вложенным if (условием) и логическим оператором с точки зрения производительности и логики.

 if(a amp;amp; b amp;amp; c){
 //do something 
 }

if(a){
   if(b){
         if(c){
       //do something
     }
   }
 }
  

Одинаковы ли приведенные выше коды по логике?
Моя главная забота — производительность кода, что с точки зрения производительности лучше всего использовать?

Ответ №1:

Если вы попытаетесь преобразовать эти два кода в assembly язык (который очень близок к машинному языку), оба кода будут преобразованы точно так же (первый код, второй код):

C:

 void Main(){
    int a=1, b=2, c= 3, res = 0;

    if(a amp;amp; b amp;amp; c)
        res = 100;
}

// or
void Main(){
    int a=1, b=2, c= 3, res = 0;

    if(a)
        if(b)
            if(c)
                res = 100;
}
  

Вывод сборки:

 Main():
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 1
        mov     DWORD PTR [rbp-8], 2
        mov     DWORD PTR [rbp-12], 3
        mov     DWORD PTR [rbp-16], 0
        cmp     DWORD PTR [rbp-4], 0
        je      .L3                     ; jump to the end if `a` is not true
        cmp     DWORD PTR [rbp-8], 0
        je      .L3                     ; jump to the end if `b` is not true
        cmp     DWORD PTR [rbp-12], 0
        je      .L3                     ; jump to the end if `c` is not true
        mov     DWORD PTR [rbp-16], 100 ; otherwise do something
.L3:
        nop
        pop     rbp
        ret