&
has lower precedence than ==
, so the compiler parses your expression as x.Data[0] & (firstPacketMask == 16)
.
Add parentheses to clarify the precedence:
(x.Data[0] & firstPacketMask) == 16
NOTE: It looks like firstPacketMask
equals 8, so ANDing it with x.Data[0]
will yield 0 or 8, never 16. Perhaps you meant to write
Byte firstPacketMask = Convert.ToByte("00010000", 2); // bit 4 is set
or maybe just
(x.Data[0] & 16) == 16