I know what & and | does - it evaluates both sides (or all conditions if more than 2) - but I can't say I've used those two operators for a very long time, I always used && and ||.
e.g. (a != null) & (a.length == 1) would throw if we're checking the length of a after we know it's null, and obviously (a != null) && (a.length == 1) would just return false if a was null without the need to check if the length of a is 1. I also know there's a slight performance benefit to using && and || if you have many conditions to check returning true/false at condition 2/100 is faster than evaluating all 100 knowing it's true/false at condition 2.
What situations would require the single &and | operands?