Для чего нужен логический оператор || и &&?

Для чего нужны эти операторы, если побитовые |, & справляются с этим?

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 3;
    if ((a == 1) && (b == 3)) printf("True");
}

Равносилен по результату:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 3;
    if ((a == 1) & (b == 3)) printf("True");
}

Ответы (1 шт):

Автор решения: αλεχολυτ

Логические операторы работают по "короткой схеме", т.е. если результат вычисления становится известен заранее, то дальнейшее вычисление не производится.

В частности это широко используется в условных операторах, например:

if (ptr && ptr->func()) { ... 

Если ptr нулевой, то вызов ptr->func() никогда не случится.

Побитовые операторы вычисляют оба своих операнда всегда, и могут работать только с целочисленными аргументами, в то время как логические работают с любыми, которые могут быть преобразованы неявно в булевы.

→ Ссылка