So your glass is half empty, and mine is half full? If you're only
dealing with one bit (which is what a bool represents), it's a bitwise
AND.
Bitwise operators work directly on in-memory bit representation of
values, not on their logical values (consider how it works for
negative signed integers to see what I mean). On the other hand, C#
does not prescribe any specific bit representation for bools, and in
fact does not even consider bool an integral type (it can't be
converted to int, even explicitly, so there's no true==1 false==0
equivalence, unlike C++).
In any case, rather than argue about wording, I suggest that we just
defer to what the language spec says, which is this:
"7.10.3. Boolean Logical Operators
There are three predefined boolean logical operators:
bool operator &(bool x, bool y);
bool operator |(bool x, bool y);
bool operator ^(bool x, bool y);
The result of x & y is true if both x and y are true. Otherwise, the
result is false.
The result of x | y is true if either x or y is true. Otherwise, the
result is false.
The result of x ^ y is true if x is true and y is false, or if x is
false and y is true. Otherwise, the result is false. When the operands
are of type bool, the ^ operator computes the same result as the !=
operator."
Note that nowhere the word "bit" is mentioned. In contrast, the same
operators applied to values of integral types are defined as:
"The & operator computes the bitwise logical AND of the two
operands, the | operator computes the bitwise logical OR of the two
operands, and the ^ operator computes the bitwise logical exclusive OR
of the two operands."
It's also worth remembering about the existence of & and | operators
on nullable bools, which are most definitely not "bitwise", neither in
semantics, nor on bit representation level (unless you're willing to
argue for "nullable bits", which would be an interesting concept).