Ich war immer der Auffassung, dass der Unterschied zwischen ||/&& und |/& darin liegt, dass ersteres Optimierung zulässt, und letzeres immer zur Vollauswertung des Ausdrucks führt. Also das, was man bei Delphi über die Compileroptionen nur global einstellen kann ("Boolsche Ausdrück vollständig auswerten" heisst die
imho).
Das kommt m.W. auf die Sprache an. In C/C++ ist die Unterscheidung logisch/bitweise, in C# verkuerzt/unverkuerzt.