> > If the narrower type is signed it is probably even more confusing! > > The high bits will be preserved unless you are masking off bit 31. > > Yes. However, that case doesn't trigger with the normal case of small > values. So "~4" works fine with widening, in a way that "~4u" does > not.
Thinks ... converting:
foo &= ~bar;
to:
foo = ~(~foo | bar);
would generally DTRT.
Whether the compiler has the relevant patterns to optimise
it is another question.
David

