Perché “&&” e non “&”?

Perché è && preferibile a & e || preferibile a | ?

Ho chiesto a qualcuno che stava programmando da anni e la sua spiegazione era:

Ad esempio, in if (bool1 && bool2 && bool3) { /*DoSomething*/ } , bool1 deve essere true per testare bool2 che deve essere vero prima di passare a bool3 , ecc. Se avessi usato un singolo & invece non c’è nessun ordine al test, anche se tutti devono essere veri per passare alla riga successiva, quindi perché è importante comunque?

Nota: vorrei far notare che sono l’equivalente di programmazione di un bambino piccolo e questa non è una domanda seria o urgente. È più una questione di capire perché le cose dovrebbero essere fatte in un certo modo piuttosto che in un altro.