Thanks MarkT,
Firstly you can use & and | rather than && and || (which may compile to conditional tests and jumps rather than
ALU operations). digitalRead() returns 0 or 1 (== LOW or HIGH), guaranteed.
I am not there yet ( my cheat sheet shows & as Pointer access and Bitwise operators )
The other point is that a hardware version is OK in a 12v or whatever circuit !