Soweit ich mich entsinne bedeutet & und && sowie | und || dasselbe.
Der Unterschied liegt zum einen in der Priorität, was aber unwichtig ist, wenn man alles klammert, und zum anderen in der Tatsache ob der gesamte Ausdruck bearbeitet wird oder nicht.
Der Compiler überprüft, AFAIR von rechts nach links. Wenn in einer ODER-Verknüpfung der rechte Teil bereits 1 ergibt, überprüft er bei einem der beiden OR-Operatoren den linken Teil überhaupt nicht mehr, weil dessen Wert keine Rolle mehr spielt.
Bei der UND-Verknüpfung ebenso, falls der rechte Teil bereits 0 ergibt. Das kann wichtig sein, wenn ein Ausdruck einen Zugriffsfehler oder so hervorruft, sollte der andere Ausdruck 1 bzw. 0 sein.

Welcher der beiden Operatoren diese verkürzte Bearbeitung hat, weiß ich allerdings nicht mehr.

PS: Ob man das gesamte IF noch klammern muss oder nicht, spielt glaub ich hier erstmal keine Rolle, es ging nur um den eigentlichen Anwendungszweck der Operatoren. Ansonsten, verzeiht, in letzter Zeit wenig mit C gearbeitet.