ensure andnot/notand/notor/ornot get called even when using mismatched arguments
use bitwise operations on integers even with mismatched integer types (signed/unsigned)
make changes to bitwise_cast for better interaction with MSVC