Emit a warning when a bitwise not operator is used with a logical and/or operator or a logical not with bitwise and/or is detected. Also emit fix-it hints to change the not operator and to change the and/or operator.
Examples:
int x = ~y || ~z;
Fixed with || => |
bool a = ~b && !c
Fixed with ~b => !b
No false positives found, although the impact of using a bitwise operator in place of a logical operator is lower than the other way round.