I'm assuming that we're only dealing with the low-order three bytes, as per the question.
A simple solution (17 operations):
((mask & 0x0000FF) == 0) == ((value & 0x0000FF) == 0) &&
((mask & 0x00FF00) == 0) == ((value & 0x00FF00) == 0) &&
((mask & 0xFF0000) == 0) == ((value & 0xFF0000) == 0)
A better solution (9 operations):
(((mask & 0x7F7F7F) + 0x7F7F7F | mask) & 0x808080) ==
(((value & 0x7F7F7F) + 0x7F7F7F | value) & 0x808080)
A third solution (9 operations):
!((((mask & 0x7F7F7F) + 0x7F7F7F | mask) ^
((value & 0x7F7F7F) + 0x7F7F7F | value)) & 0x808080)
The third solution can be reduced to 8 operations by dropping the !
surrounding the entire expression if your code is prepared to handle zero as pass and non-zero as fail.