AFAIK, with && both will be converted to bool first for integral/POD types, then the result returned will also be bool. For &, each bit is treated as its own bool and like positions are compared:
Code:
flags1 && flags2 -> true && true (anything non-zero is true) -> true
flags1 & flags2 -> 0000 0000 1111 1111 &
1111 1111 0000 0000 ->
0000 0000 0000 0000
If either operand is a class object then the operation will only be evaluated if there is an overloaded/global operator that will take both operands as arguments in the order that they are given. In that case, it's up to the implementor to decide how the operator will behave.
ta0kira